Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note:
- For the return value, each inner list's elements must follow the lexicographic order.
- All inputs will be in lower-case.
Subscribe to see which companies asked this question
本来写成下面的,超时了
这里面有两个优化,一个是使用get方法,可以免去判断
一个是,上来就相对strs进行排序
还有一个是,不要用set了,直接对每个字符串进行一个排序,这样就进行了一个归一化了
class Solution(object):
def groupAnagrams(self, strs):
dic = {}
strs.sort()
for i in strs:
ii = ''.join(sorted(i))
dic[ii] = dic.get(ii, []) + [i]
'''
if ii in keys:
dic[ii].append(i)
else:
keys.append(ii)
dic[ii] = [i]
'''
res = list(dic.values())
return res