Python 使用递归查找子序列

Python 使用递归查找子序列,python,recursion,Python,Recursion,我需要一个程序返回True,如果一个字符串(s2)只能通过从s2中删除字符而转换为另一个字符串(s1)。例如,如果s1=star和s2=swewtffsafefr它将返回True 到目前为止,我已经想到了这一点: def subsequence(s1, s2, pos=0): if pos < len(s1): subsequence(s1,s2, pos+1) else: return 0 def子序列(s1、s2、pos=0): 如果位

我需要一个程序返回
True
,如果一个字符串(
s2
)只能通过从
s2
中删除字符而转换为另一个字符串(
s1
)。例如,如果
s1=star
s2=swewtffsafefr
它将返回
True

到目前为止,我已经想到了这一点:

def subsequence(s1, s2, pos=0):
    if pos < len(s1):
        subsequence(s1,s2, pos+1)
    else:
        return 0
def子序列(s1、s2、pos=0):
如果位置<长度(s1):
子序列(s1、s2、位置+1)
其他:
返回0

我不知道如何让它删除
s2
中不在
s1
中的字符要删除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)
if len(diff) == 0:
    break
else:
    new_s2 = ''
    for c in s2:
        if c not in diff:
            new_s2 = new_s2 + c
现在删除差异中s2中的字符(s2中的字符不在s1中的字符)


您仍然存在的问题是删除重复项

要删除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)
if len(diff) == 0:
    break
else:
    new_s2 = ''
    for c in s2:
        if c not in diff:
            new_s2 = new_s2 + c
现在删除差异中s2中的字符(s2中的字符不在s1中的字符)


您仍然存在的问题是删除重复项

,这样您就知道您需要一个递归函数
subseq(s1,s2)

首先,你需要拿出你的基本情况

  • s1==s2,为此我们将返回true
  • s1为空,因此我们也将返回true
  • s2是空的,但s1不是,我们将返回false
  • 其他一切
  • 接下来,您需要将其转换为代码

  • 如果s2中的s1:返回True
  • 如果不是s1:返回True
  • 如果不是s2:返回False
  • #其他一切
  • 对于其他方面,我们需要进一步细分

  • 如果s1[0]==s2[0],则推进两个指针
  • 否则只需提前s2

  • 所以你知道你想要一个递归函数
    subseq(s1,s2)

    首先,你需要拿出你的基本情况

  • s1==s2,为此我们将返回true
  • s1为空,因此我们也将返回true
  • s2是空的,但s1不是,我们将返回false
  • 其他一切
  • 接下来,您需要将其转换为代码

  • 如果s2中的s1:返回True
  • 如果不是s1:返回True
  • 如果不是s2:返回False
  • #其他一切
  • 对于其他方面,我们需要进一步细分

  • 如果s1[0]==s2[0],则推进两个指针
  • 否则只需提前s2

  • 你在用这个代码做什么。。。你能用英语解释一下你想完成什么吗?(一步一步)这里的代码是我得到的,我想给函数提供两个参数,
    s1
    s2
    ,它们都是字符串。我想使用递归遍历
    s2
    中的每个位置字符,如果
    s2
    可以等于
    s1
    我从中删除了0个或更多字符,则返回
    True
    。这里我对一个简单的问题给出了非常彻底的答案。。。希望您可以在测试中使用此代码做什么。。。你能用英语解释一下你想完成什么吗?(一步一步)这里的代码是我得到的,我想给函数提供两个参数,
    s1
    s2
    ,它们都是字符串。我想使用递归遍历
    s2
    中的每个位置字符,如果
    s2
    可以等于
    s1
    我从中删除了0个或更多字符,则返回
    True
    。这里我对一个简单的问题给出了非常彻底的答案。。。希望你能在考试中做到