49. Group Anagrams
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
https://leetcode.wang/leetCode-49-Group-Anagrams.html
Solution1
Time O(NKlogK) N is # of string , K is max length
Space O(NK) store in res
注意问题:
python :
- sorted(list)返回new list
- list.sort() 直接对list进行modifiy 返回NONE
- dict 的 key should be immutable
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
res = {}
for s in strs:
key = tuple(sorted(s))
if res.has_key():
res[key].append(s)
else:
res[key] = [s]
return res.values()
Solution2
新建一个【0,0,0... 】26*1的listcount出钱频次
然后以他为key建dict
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
res = {}
for s in strs:
a = [0]*26
for c in s:
a[ord(c)-ord('a')] +=1
key = tuple(a)
if res.has_key(key):
res[key].append(s)
else:
res[key] = [s]
return res.values()