该参数是一个单词列表。期望输出一组字谜的列表。
def anagrams(lst):
d = {}
while len(lst) > 0:
pop = lst.pop()
d[pop] = d.get(pop, [])
d[pop].append(pop)
for word in lst:
perm = [''.join(p) for p in permutations(pop)]
if word in perm:
d[pop].append(word)
lst.remove(word)
anagram = d.values()
return list(anagram)
print(anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node']))-控制台输出.(输出错误)
[['node', 'done'], ['soup'], ['tea', 'eat'], ['ate']]--期望产出
[['eat', 'ate', 'tea], ['done', 'node'], ['soup']]当pop = 'tea‘在while循环中时,我尝试了我的伪代码。
pop = ‘tea’
lst = [‘eat’,’ate’]
for ‘eat’ in lst:
perm = perm of [tea]
if eat in perm (true)
d[tea].append(‘eat’) # d[tea] = [tea, eat]
lst = [‘ate’]
for ‘ate’ in lst:
perm = perm of [tea]
if ‘ate’ in perm: (should be yes)
d[tea].append(ate) -> d[tea] = [tea, eat, ate]
lst.remove['ate'] -> lst = [] ,这不是的情况
发布于 2020-04-27 03:15:23
我认为你有正确的想法,但你让这有点太难了。您可以创建字典,因此键是单词的排序字母。这将使ate和eat最终位于键aet下的同一个位置。这样就避免了计算排列,它只是几行,而且速度很快:
from collections import defaultdict
def anagrams(words):
lookup = defaultdict(list)
for word in words:
lookup["".join(sorted(word))].append(word)
return list(lookup.values())
anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node'])
# [['eat', 'ate', 'tea'], ['done', 'node'], ['soup']]发布于 2020-04-27 03:15:32
来自这里的简单解决方案
def anagrams(strs):
result = {}
for i in strs:
x = "".join(sorted(i))
result.setdefault(x, []).append(i)
return list(result.values())
print(anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node']))
#Out: [['eat', 'ate', 'tea], ['done', 'node'], ['soup']]解释
为了解决这个问题,我们将遵循以下步骤 将结果定义为字符串数组中i的映射x := x和联接,如果x在结果中插入i,则按结果插入i作为列表返回结果的值
https://stackoverflow.com/questions/61450996
复制相似问题