我想创建一个python函数来检查给定的字符串是否是字谜,如果只有一个单词不匹配,这段代码就可以工作,也就是说,如果字符串是坏的,那么它返回'b'和'd',但是如果字符串是'zippo'和'hipps',它只返回z和h,如何修改代码以返回所有不匹配的值
def anagram(str_1, str_2):
'''
This function check if two string are anagram,
if yes then prints yes otherwise it checks
for the words that need to be deleted to make it an anagram.
'''
if sorted(str_1) == sorted(str_2):
return "The given strings are anagrams"
else:
# words_needed_to_removed = []
zipped_strings = zip(str_1,str_2)
for (i,j) in zipped_strings:
if i!=j:
return i,j
# words_needed_to_removed.append((i,j))
# return f"The words needed to be removed to make the strings an anagram are:{words_needed_to_removed}"
你有两个选择
yield
代替return
list
中作为tuple
存储,然后返回list
李>此外,另一项建议是:
找到特定字符串中每个字符的计数,然后进行比较,而不是对字符串进行排序
排序需要O(nlogn),而计数只需要O(n)。尽管这增加了空间的复杂性
要返回所有内容,请将其添加到列表中,然后在循环结束时返回列表
但是,您的代码不适用于排序顺序导致匹配字母之间偏移的情况。例如:
anagram("ohipzs", "hipzas")
给出了[('o', 'h'), ('h', 'i'), ('i', 'p'), ('p', 'z'), ('z', 'a')]
,即使唯一的不匹配是'o'
和'a'
相反,您可以首先制作一个计数器,其中包含第一个单词中所有字母的计数
接下来,从这个计数器中减去第二个单词的所有字母
最后,返回值不为零的
counter
的所有键将其放入函数并进行测试,可以得到:
anagram2("bad", "dad")
->[('b', 'd')]
anagram2("zippo", "hipps")
->[('z', 'h'), ('o', 's')]
anagram2("ohipzs", "hipzas")
->[('o', 'a')]
相关问题 更多 >
编程相关推荐