Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
思路1: 用collections.defaultdict(list) 来 group strings, 这样value的初始值是空list。
collections.defaultdict(int) 的初始值是0,还可以制定初始值,比如
collections.defaultdict(lambda: 'Hello')
注意collections.defaultdict(list) 和 dict = {} 的区别。后者无法group相同的key。另外注意key不能是list,python中的key 支持tuple ( 类似list的结构,不能给改变,用()而不用[] )。
1 def groupAnagrams(strs): 2 group = collections.defaultdict(list) 3 for s in strs: 4 group[tuple(sorted(s))].append(s) 5 return sorted(groups.values())
这个解,对于每个string都做了排序,O(n m logm)。还可以将26个字母,每个对应一个prime。这样两个string是anagrams等价于两个string的product相同。此解法的复杂度为O(mn).
Leetcode 242. 检查两个string是不是anagram的关系。
直接用collections.Counter