我试图编写一个递归代码,收到2个字符串并返回True是他们有一个共同的字符,如果不是,则为False。 我首先编写了一个迭代代码,因为我认为它可能有所帮助。 我遇到的问题是我不知道如何比较每个字符串中的所有字符。这是我到目前为止所做的: 迭代代码:
def any_char_present_it(s1,s2):
if len(s1)==0 or len(s2)==0:
return False
for i in s2:
for m in s1:
if i==m:
return True
return False
递归代码:
def any_char_present(s1,s2):
if len_rec(s2)==0:
return False
if s1[0]==s2[0]:
return True
return any_char_present(s1,s2[1:])
答案 0 :(得分:2)
您可以使用集合和集理论来检查常见字符,而无需自己迭代所有内容。
has_common_chars
将两个字符串转换为集合并找到它们的交集。如果交点的长度大于零,则至少有一个共同的字符。
s1 = "No one writes to the Colonel"
s2 = "Now is the time or all good men to come to the ade of the lemon."
s3 = "ZZZZ"
def has_common_chars(s1, s2):
return len(set(s1) & set(s2)) > 0
print has_common_chars(s1, s2)
print has_common_chars(s2, s3)
>>> True
>>> False
EDIT s / union / intersection
答案 1 :(得分:1)
为了摆脱你的代码,你必须尝试每一个组合。为此,您可以在return语句中减少每个字符串,如下所示:
#return check(s1, decremented s2) or check(decremented s1, s2)
return (any_char_present(s1,s2[1:]) or any_char_present(s1[1:],s2))
这应该耗尽所有可能的组合,以在两个字符串输入的任何点找到字符匹配。
整个代码:
def any_char_present(s1,s2):
#update this if statement to check both strings
#you can check for empty strings this way too
if not s1 or not s2:
return False
if s1[0]==s2[0]:
return True
return (any_char_present(s1,s2[1:]) or any_char_present(s1[1:],s2))
print(any_char_present("xyz", "aycd"))