anagram 变位词题目一则

421 阅读1分钟

anagram 变位词题目一则


1. 题目

Given an array of strings, return an array of strings that groups all anagrams. An anagram is a word that has the same letters, but in different positions. i.e. given ["cars", "thing", "scar", "dog", "god", "arcs", "the"] return [["cars", "scar", "arcs"], ["thing"], ["dog", "god"], ["the"]]


2. 思路

对每个单词的所有字母进行排序,得到的值可以作为字典的键。 比如 scarcars 得到的键是 acrs。 与键对应的值是一个列表,存储原单词。 返回这个字典的值组成的列表即可。

补充 还有一种判断两个词是否是同位词的方法是:转化成列表,然后 remove


3. 实现

def find_anagrams(words):
    words_pair = zip(words, [str(sorted(w)) for w in words])
    res_dict = {}
    for i, j in words_pair:
        res_dict.setdefault(j, [])
        res_dict[j].append(i)
    return list(res_dict.values())


words = ['cars', 'thing', 'scar', 'dog', 'god', 'arcs', 'the']
res = find_anagrams(words)
print(res)

"""
[['cars', 'scar', 'arcs'], ['thing'], ['dog', 'god'], ['the']]
"""


完成于 2018.12.18