Python 字符串递归问题

Python 字符串递归问题,python,string,Python,String,我对python比较陌生,尤其是递归。 我已经试着解决这个问题有一段时间了,但到目前为止我还是被它打败了 我必须创建一个函数,该函数接受2个字符串,并使用递归来查看第一个字符串中的元素是否在第二个字符串中,如果是,则返回true,如果不是,则返回false 说“拼车”和“prlo”或“大象”和“xph” 在第一种情况下,递归参数将返回True,在第二种情况下,它将返回False def compare(str1, str2): if str1[0] in str2: if

我对python比较陌生,尤其是递归。 我已经试着解决这个问题有一段时间了,但到目前为止我还是被它打败了

我必须创建一个函数,该函数接受2个字符串,并使用递归来查看第一个字符串中的元素是否在第二个字符串中,如果是,则返回true,如果不是,则返回false 说“拼车”和“prlo”或“大象”和“xph” 在第一种情况下,递归参数将返回True,在第二种情况下,它将返回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   
这就是我一直想做的。我设置了一个计数,这样如果元素匹配,我就可以增加它,最后如果它等于len(str2),我就打印2。主要的问题是分别遍历这两个字符串,你知道我应该如何处理吗

def比较(str1、str2):

关于你的例子:

>>> compare( "Carpool" , "prlo")
True
>>> compare("elephant", "xph")
False
工作原理 该函数处理字符串2中的每个字符,
s2
,一次处理一个字符。有三种情况:

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

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

  • 如果
    s2[0]
    不在
    s1
    中,则我们将失败并返回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   
    

    你不需要柜台。您只需检查第一个字符串(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   
    

    如果
    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
    这样的变量时,您需要将其用作参数,以保持每次
    递归调用之间的值,否则每次调用都将重置为
    0

    您确定函数的轮廓正确吗?你想检查str1的每个字符是否都在str2中吗?如果我做对了,你想返回
    true
    如果
    str1
    str2
    共享字符,并对它们进行计数?为了弄清楚是的,我需要看看str1中的字符是否与str2顺序中的字符匹配,而不管它们出现在什么顺序。我不必计数,只要返回true,如果str2中的字符出现在str1中,如2个示例所示。您为什么不在
    中仅使用
    ,是否有一些要求可以防止这种情况?