时间: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())总结:
加油加油,不断积累周六要去古北水镇了,有点开心♪(^∀^●)ノ