字符串递归问题

时间:2014-07-27 23:58:22

标签: python string

我对python相对较新,特别是递归。 我一直试图解决这个问题一段时间,但到目前为止它已经让我失望了

我必须创建一个函数,该函数接收2个字符串并使用递归来查看第一个字符串中的元素是否在第二个字符串中,如果是这样,如果不是,则返回true返回false 说"拼车"和" prlo"或" elephant"和" xph" 在第一种情况下,递归参数将返回True,而在第二种情况下,它将返回False。

这就是我一直在尝试做的事情。我设置了一个计数,这样如果元素匹配,我可以增加它,如果它等于len(str2),那么我打印2.主要问题是分别迭代2个字符串,任何想法如何我应该接近这个?

def compare(str1,str2):

count = 0
if str1 == str2:
    return "True"           
elif str1[0] == str2[0]:
    count = count + 1
    return letCheck (str1[1:],str2)
elif str1[0] != str2[0]:
    return letCheck (str1[1:],str2)

3 个答案:

答案 0 :(得分:2)

def compare(s1, s2):
    if not s2:
        return True
    elif s2[0] in s1:
        return compare(s1, s2[1:])
    else:
        return False

关于你的例子:

>>> compare( "Carpool" , "prlo")
True
>>> compare("elephant", "xph")
False

如何运作

该函数一次处理一个字符串2中的每个字符s2。有三种情况:

  1. 如果s2中没有要处理的字符,则表示所有测试都已通过,我们返回True。

  2. 如果s2中仍有字符,则我们会测试s2[0]。如果它通过,我们然后使用递归来测试字符串的其余部分。

  3. 如果s2[0]不在s1,那么我们就会失败并返回False。

答案 1 :(得分:0)

你不需要柜台。您可以检查第一个字符串(str1)的第一个字母是否在第二个字符串(str2)中。如果是,则检查这是否是第一个字符串的最后一个字符。如果它不是最后一个字符,则将其余字符串再次传递给函数(递归)。 如果第一个字符串中的一个字符不在第二个字符串中,则返回False。

def compare(str1, str2):
    if str1[0] in str2:
        if len(str1) == 1:
            return True;
        return compare(str[1:0], str2);
    else:
        return False;

print compare('ak', 'abcd');  # False
print compare('cd', 'abcd');  # True
print compare('efgh', 'efg'); # False   

答案 2 :(得分:0)

如果str2作为空字符串传入,则返回False:

def letCheck(str1, str2, count = 0):
    if str1 == str2: # both strings are equal,we don't have to  go any further
        return True
    elif str2 == "" and count == 0: # if str2 is empty and count is 0 we got passed an empty str2
        return False
    elif len(str2) == count: # if count and len are equal, all str2 letters are in str1
        return True
    elif str2[0] in str1:
        count += 1 # increase count and move to the next letter in str2[1:]
        return letCheck(str1, str2[1:],count)
    return False # if we get here we have found a letter that is not in str1

使用count之类的变量时,您需要将其用作参数以保持每个recursive调用之间的值,否则每次调用都会重置为0。< / p>