题目:
给定一个数组,如["eat", "tea", "tan", "ate", "nat", "bat"],将其按照包含字符分组,分组结果如
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
解题思路:
考虑使用哈希表,加快速度。先将所有的字符串各自排序,将排序后的字符串逐一放到dict里,若dict中已存在该字符串,则跳过,否则将该字符串放入dict,且count+1,用count来记录当前字符串为第几组。
经过上述步骤,当前dict中存储的是排序后的字符串及各自对应的组号。再将原字符串根据排序后在字典中的value,依次加入到对应序号的输出列表即可。
代码(python):
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
strs_c = copy.deepcopy(strs)
dict_s = {}
count = 0
for i in range(len(strs_c)):
temp = list(strs_c[i])
temp.sort()
strs_c[i] = ''.join(temp)
for i in range(len(strs_c)):
if strs_c[i] not in dict_s:
dict_s[strs_c[i]]=count
count=count+1
output = [ [ ] for i in range(count) ]
for i in range(len(strs)):
output[dict_s[strs_c[i]]].append(strs[i])
return output