Leetcode 49. Group Anagrams, 242. Valid Anagram

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

 

posted @ 2017-03-01 12:21  lettuan  阅读(110)  评论(0编辑  收藏  举报