Python 代码的递归版本
在确定一个字符串是否是另一个字符串的子序列时,我有以下代码:Python 代码的递归版本,python,Python,在确定一个字符串是否是另一个字符串的子序列时,我有以下代码: def subseq(strA, strB): if not strA: return True else: for char in strB: if strA: strA = strA[char == strA[0]:] return strA == "" >>> subseq('cat', 'XIKS
def subseq(strA, strB):
if not strA:
return True
else:
for char in strB:
if strA:
strA = strA[char == strA[0]:]
return strA == ""
>>> subseq('cat', 'XIKSLPWswifmscakst')
True
>>> subseq('cat', 'XIKSLPWswifmsctksa')
False
虽然这很好,但有没有一种方法可以递归地解决这个问题?迭代版本通常在Python上工作得更好,因为它没有尾部调用优化,而且函数调用很重。但作为练习,这里是我的解决方案
def subseq(needle, haystack):
if not needle: return True
if len(needle) > len(haystack): return False
if needle[0] == haystack[0]:
return subseq(needle[1:], haystack[1:])
else:
return subseq(needle, haystack[1:])
但不要用这个强>
- 它将导致长字符串上的堆栈溢出(
)len>sys.getrecursionlimit()
- 它将构建许多中间字符串(每个片段返回另一个副本)
- 迭代版本同样可读李>
'cat'
是'cakst'
的子序列?Python在'LASJLFJD'中提供了'cat';lfasdcat'
@JaredBurrows但如果“catcat”中的“cat”则不会:检查cat是子字符串吗?虽然子序列是一个序列,可以通过删除某些元素而不改变其余元素的顺序,从另一个序列中派生出来?对,但这不是一个破坏者,因为他要求这样做。我玩得很开心。