时间:2020-9-4
题目地址:https://leetcode-cn.com/problems/group-anagrams/
题目难度:Medium
题目描述:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
思路1:用哈希 + 设计映射策略
代码段1:通过
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict1, res = {}, []
for str in strs:
temp = ''.join(sorted(str))
if temp in dict1:
dict1[temp].append(str)
else:
dict1[temp] = [str]
for li in dict1.values():
res.append(li)
return res
总结:
- 看了探索才有的思路,自己想估计够悬
- 以后写完试试,看看怎么把代码写优雅一点吧
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict1, res = {}, []
for str in strs:
temp = ''.join(sorted(str))
if temp in dict1:
dict1[temp].append(str)
else:
dicAt1[temp] = [str]
return list(dict1.values())
思路2:使用defaultdict
代码段2:通过
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
from collections import defaultdict
lookup = defaultdict(list)
for s in strs:
lookup["".join(sorted(s))].append(s)
return list(lookup.values())
总结:
- python写了好多第三方的库,所以好优雅哇。
思路3:使用元组 + dict.get()
dict.get(key, default=None)
1. key -- 字典中要查找的键。
2. default -- 如果指定键的值不存在时,返回该默认值。
字典的键不可变,所以是元组tuple
代码段3:通过
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict = {}
for item in strs:
key = tuple(sorted(item))
dict[key] = dict.get(key, []) + [item]
return list(dict.values())
总结:
- 加油加油,不断积累
- 周六要去古北水镇了,有点开心♪(^∀^●)ノ