如果只有一个字符串(True
)可以通过从s2
中删除字符而转换为另一个字符串(s1
),我需要一个程序返回s2
。例如,如果s1 = star
和s2 = swewtffsafefr
它将返回True
到目前为止我已经想出了这个:
def subsequence(s1, s2, pos=0):
if pos < len(s1):
subsequence(s1,s2, pos+1)
else:
return 0
我无法弄清楚如何删除s2
中不在s1
答案 0 :(得分:3)
所以你知道你想要一个递归函数subseq(s1,s2)
首先你需要拿出你的基础
接下来你需要把它放到代码中
if s1 in s2:return True
if not s1: return True
if not s2: return False
#everything else
我们需要进一步分解其他一切
def subseq(s1,s2):
if s1 in s2: return True
if not s1: return True
if not s2: return False
#everything else
if s1[0] == s2[0]: return subseq(s1[1:],s2[1:])
return subseq(s1,s2[1:])
答案 1 :(得分:1)
要删除s2中不在s1中的字符并不难,有很多方法
set_s1 = set([item for item in s1])
set_s2 = set([item for item in s2])
这可以获得s1和s2中唯一的字符
现在识别s2中不在s1
中的值diff = set_s2.difference(set_s1)
现在从diff中删除s2中的字符(s2中的字符不在s1中)
if len(diff) == 0:
break
else:
new_s2 = ''
for c in s2:
if c not in diff:
new_s2 = new_s2 + c
问题仍然是删除重复