题目:
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.
做此题时,老是无法通过测试(time limited exceed)。其实思路极为简单,就是建立一个字典匹配每一类anagram,然后输出结果即可。后来参考别人的代码思考一番进行修改,便通过了。主要是python 的dict的特性问题:
代码1(我的):
class Solution:
# @param {string[]} strs
# @return {string[][]}
def groupAnagrams(self, strs):
ans = []
map = {}
for s in strs:
tmp_s = ''.join(sorted(s))
if map.get(tmp_s)!=None:
map[tmp_s] += [s]
else:
map[tmp_s] = [s]
for item in map.values():
ans += [sorted(item)]
return ans
代码2(参考):
class Solution:
# @param {string[]} strs
# @return {string[][]}
def groupAnagrams(self, strs):
dic = {}
for s in strs:
dic[tuple(sorted(s))] = dic.get(tuple(sorted(s)),[]) + [s]
res = []
[res.extend([sorted(item)]) for item in dic.values()]
return res