题目描述:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
题目大意:
给定一个字符串数组,返回所有互为字谜(anagram,变位词)的字符串的分组。
注意:所有输入只包含小写字母
解题思路:
排序 + 哈希,使用Python的内置函数,例如reduce,filter等,可以简化代码。
解法I(字典+排序):
Python代码:
class Solution:
# @param {string[]} strs
# @return {string[]}
def anagrams(self, strs):
map = collections.defaultdict(list)
for s in strs:
map[''.join(sorted(s))] += s,
return reduce(operator.add, filter(lambda x : len(x) > 1, map.values()), [])
解法II(使用collections.Counter计数器工具类):
Python代码:
class Solution:
# @param {string[]} strs
# @return {string[]}
def anagrams(self, strs):
from collections import Counter
counter = collections.Counter([tuple(sorted(s)) for s in strs])
return filter(lambda x : counter[tuple(sorted(x))] > 1, strs)
本文链接:http://bookshadow.com/weblog/2015/08/03/leetcode-anagrams/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。