如何实现判断地形浮雕字符串的递归Python函数?
递归实现地形浮雕字符串合法性判断
首先明确字符间的合法过渡规则,这是判断的核心:
_(平地)可后续接_、/、\¯(高地)可后续接¯、/、\/(上坡)只能接_、¯(上坡结束只能到平地或高地)\(下坡)只能接_、¯(下坡结束只能到平地或高地)
基于这个规则,递归实现的思路非常清晰:
- 基线条件:空字符串或单个字符必然合法,返回
True - 递归步骤:检查当前字符串的前两个字符是否符合过渡规则,若符合则递归判断从第二个字符开始的子串;若不符合直接返回
False
代码实现
def isLandscape(s): # 定义字符允许的后续字符映射 valid_transitions = { '_': {'_', '/', '\\'}, '¯': {'¯', '/', '\\'}, '/': {'_', '¯'}, '\\': {'_', '¯'} } # 基线情况:空串或单个字符有效 if len(s) <= 1: return True # 检查前两个字符的过渡是否合法 current_char, next_char = s[0], s[1] if next_char not in valid_transitions.get(current_char, set()): return False # 递归处理剩余子串 return isLandscape(s[1:]) # 测试给定示例 print(isLandscape(' ')) # True print(isLandscape('_')) # True print(isLandscape('_/\\_')) # True(Python中反斜杠需转义) print(isLandscape('_/¯\\/\\__/\\_/¯\\_')) # True print(isLandscape('_/_/¯_/¯¯')) # False print(isLandscape('_/¯\\__')) # False
说明
- 用字典存储合法过渡关系,比大量
if判断更简洁易维护,后续如果有规则调整直接修改字典即可 - 递归过程每次只聚焦当前相邻字符的合法性,将问题逐步缩小,符合递归的分治逻辑
- 针对示例中的空格输入
' ',如果是输入笔误(实际想表示空串),可在函数开头添加if s.strip() == '': return True来兼容
内容的提问来源于stack exchange,提问作者John_Milkshake
相关产品推荐
相关产品推荐

