Python 字符串递归问题
我对python比较陌生,尤其是递归。 我已经试着解决这个问题有一段时间了,但到目前为止我还是被它打败了 我必须创建一个函数,该函数接受2个字符串,并使用递归来查看第一个字符串中的元素是否在第二个字符串中,如果是,则返回true,如果不是,则返回false 说“拼车”和“prlo”或“大象”和“xph” 在第一种情况下,递归参数将返回True,在第二种情况下,它将返回FalsePython 字符串递归问题,python,string,Python,String,我对python比较陌生,尤其是递归。 我已经试着解决这个问题有一段时间了,但到目前为止我还是被它打败了 我必须创建一个函数,该函数接受2个字符串,并使用递归来查看第一个字符串中的元素是否在第二个字符串中,如果是,则返回true,如果不是,则返回false 说“拼车”和“prlo”或“大象”和“xph” 在第一种情况下,递归参数将返回True,在第二种情况下,它将返回False def compare(str1, str2): if str1[0] in str2: if
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
中没有要处理的字符,则表示所有测试都已通过,我们返回Trues2
中仍有字符,则我们测试s2[0]
。如果它通过了,我们就使用递归来测试字符串的其余部分s2[0]
不在s1
中,则我们将失败并返回Falsedef 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个示例所示。您为什么不在
中仅使用,是否有一些要求可以防止这种情况?