题目
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
解题思路
对于输入的字符串,排序后作为key,放到字典里即可
时间复杂度:
o
(
n
k
log
k
)
o(nk\log k)
o(nklogk)
空间复杂度:
o
(
n
k
)
o(nk)
o(nk)
如果不使用排序后的结果作为key的话,可以考虑用字典记录每个字母出现的次数。两个字符串中,所有字母的出现次数都相同,那么两个字符串就是异位词
代码
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
visited = {}
for each_str in strs:
key = ''.join(sorted(each_str))
if key not in visited:
visited[key] = []
visited[key].append(each_str)
return list(visited.values())
Use bucket sort to sort
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
def get_key(string: str) -> str:
char_cnt = [0] * 26
for each_c in string:
diff = ord(each_c) - ord('a')
char_cnt[diff] += 1
return ','.join(map(str, char_cnt))
res = {}
for each_str in strs:
str_key = get_key(each_str)
if str_key not in res:
res[str_key] = []
res[str_key].append(each_str)
return list(res.values())