我正在尝试解决这个问题。问题是:给定一个字符串 S 和一个字符串 T,计算 S 中 T 的不同子序列的数量。
字符串的子序列是由原始字符串通过删除一些(可以是无)字符而不干扰剩余字符的相对位置而形成的新字符串。(即,“ACE”是“ABCDE”的子序列,而“AEC”不是)。
这是一个例子:S =“兔子”,T =“兔子”
答案应该是 3。
class permute:
def __init__(self):
self.count = 0
def count_permute(self, s, t, i, j):
print(i, j)
if t in s:
self.count += 1
return
if i >= len(s) or j >= len(t):
return
self.count_permute(s, t, i+1, j)
if s[i] == t[j] and j == (len(t)-1):
self.count += 1
self.count_permute(s, t, i+1, j+1)
else:
self.count_permute(s, t, i+1, j+1)
def print_count(self):
print(self.count)
p = permute()
p.count_permute("rabbbit", "rabbit", 0, 0)
p.print_count()
通过创建矩阵,我还知道动态编程解决方案。但是我想知道这种递归方法哪里出错了?目前它正在打印 6,但答案应该是 3。