惠州市 网站开发公司,网站登录验证码怎么做,页面设计模板网站,html网站代码LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】 题目描述#xff1a;解题思路一#xff1a;哈希表和排序#xff0c;这里最关键的点是#xff0c;乱序单词的排序结果必然是一样的#xff08;从而构成哈希表的key#xff09;。解题思路二#xff1a;解题思路三… LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】 题目描述解题思路一哈希表和排序这里最关键的点是乱序单词的排序结果必然是一样的从而构成哈希表的key。解题思路二解题思路三用字符计数数组作为哈希表的key。注意将数组转为tuple因为数组不可作为哈希表的key。 题目描述
给你一个字符串数组请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]] 示例 2:
输入: strs [“”] 输出: [[“”]] 示例 3:
输入: strs [“a”] 输出: [[“a”]]
提示
1 strs.length 104 0 strs[i].length 100 strs[i] 仅包含小写字母
解题思路一哈希表和排序这里最关键的点是乱序单词的排序结果必然是一样的从而构成哈希表的key。
class Solution:def groupAnagrams(self, strs: List[str]) - List[List[str]]:res []mapping {}for s in strs:key str(sorted(s))mapping[key] mapping.get(key, []) [s]for key, value in mapping.items():res.append(value)return res时间复杂度O(n) 空间复杂度O(n)
解题思路二
class Solution:def groupAnagrams(self, strs: List[str]) - List[List[str]]:table collections.defaultdict(list)for s in strs:key .join(sorted(s))table[key].append(s)return list(table.values())时间复杂度O(nk logk) 空间复杂度O(nk) 其中 n 是strs 中的字符串的数量k 是 strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。
解题思路三用字符计数数组作为哈希表的key。注意将数组转为tuple因为数组不可作为哈希表的key。
class Solution:def groupAnagrams(self, strs: List[str]) - List[List[str]]:mp collections.defaultdict(list)for st in strs:counts [0] * 26for ch in st:counts[ord(ch) - ord(a)] 1# 需要将 list 转换成 tuple 才能进行哈希mp[tuple(counts)].append(st)return list(mp.values())时间复杂度O(nk) 空间复杂度O(nk)