gpt4 book ai didi

python - 最有效的方法——测试 2 个字符串的 Python 字谜

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:23 24 4
gpt4 key购买 nike

testing if strings are anagrams有很多种方式.但是,我想知道是否有一种方法可以只对每个单词进行一次迭代?如果不是,在 Python 中最有效的方法是什么?

我们可以遍历第二个字符串,检查第一个字符串中是否存在每个字符。然而,当使用内置 __contains__() 时,在最坏情况下(逆向图),这给了我们对第一个字符串的 n-1 次迭代。方法(调用了 __iter__() 方法)。

def is_anagram(str_1, str_2):
#chceck if same length
if (len(str_1) != len(str_2)):
return False
else:
#lowercase all characters
str1, str2 = list(str_1.lower()),list(str_2.lower())
for letter in str1:
if letter not in str2:
return False
str2.remove(letter)
return True

还有其他办法吗?

最佳答案

如果您可以使用 Collections.Counter 那么它就变得简单了,因为如果两个单词是变位词,它们将具有相同的键和相同的值。

from collections import Counter
def is_anagram(word1,word2):
return Counter(word1)==Counter(word2)

word1 = 'ahbgrettf'
word2 = 'arethbfgt'

print(is_anagram(word1,word2)

添加到@Maxime 的答案中,如果我们使用 defaultdict,我们不必检查键是否存在,然后检查键是否匹配和值是否匹配来决定它是否是一个变位词。

from collections import defaultdict

def is_anagram(word1,word2):
table1, table2 = defaultdict(int), defaultdict(int)

for c in word1:
table1[c]+=1

for c in word2:
table2[c]+=1

if set(table1.keys()) == set(table2.keys()):
for k, v in table1.items():
if table2[k]!=v:
return False
else:
return False
return True

print(is_anagram('ahbgrettf','arethbfgt'))

关于python - 最有效的方法——测试 2 个字符串的 Python 字谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com