嗨,我是Python的新手,我写了代码来查找按字母顺序排序的单词列表中最大的字谜组。问题是,它仅检查SIDE BY SIDE的两个单词是否是字谜。不要检查整个列表。 例如,如果列表为
['afd','daf','fad','htrw']
它将具有正确的输出:
['afd','daf','fad']
但是如果单独显示,例如:
['afd','bcf','daf','fad']
然后输出将是:
['daf','fad']
这是错误的。
这是我代码的一部分?
index=1
#PROBLEM HERE??
while index<len(arr):
if areAnagrams(firstWord,arr[index]):
groupLength+=1
if groupLength>largestGroupSize:
largestGroupIndexStart=groupIndex
largestGroupSize=groupLength
largestGroupIndexEnd=index
else:
firstWord=arr[index]
groupLength=1
groupIndex=index
index+=1
任何帮助将不胜感激!
答案 0 :(得分:3)
您可以使用一种与单词按字母顺序排序的事实无关的方法。
1 .//首先,您将所有彼此变位的单词组合在一起,以便有多个列表 2. /然后选择最长的列表
from collections import defaultdict
anagrams_list = ['afd','bcf','daf','fad']
anagrams_map = defaultdict(list) # defaultdict creates a default type for each new dict attribute accessed: here list
for ana in anagrams_list:
# each anagram has the same "signature": they are all made from the same letters
# so we use this signature as the key
# and associate to the key all the anarams versions we have
anagrams_map[''.join(sorted(ana))].append(ana)
# Then we find the dict key which is associated with the longest list
max_key = max(anagrams_map, key= lambda x: len(set(anagrams_map[x])))
# We print it: it will already be alphabetically sorted as anagrams_list was sorted too
# if the initial list isn't sorted, you can sort the list here
print(anagrams_map[max_key])
注意事项(请参见IljaEverilä的评论): :这是一般情况的字谜,其中单词彼此重新排列(scar VS cars)
。
如果您还希望将仅使用所有相同字母(hello VS hole)
的单词进行分组,则可以使用冻结集作为唯一键:
anagrams_map[frozenset(ana)].append(ana)
代替
anagrams_map[''.join(sorted(ana))].append(ana)