传送门
解题思路:
用哈希表的方法来做,用 map 来存储字母相同的单词;
将每一个单词的字母排序后用作 key, 保证相同字母的单词的 key相同,遍历一次数组即可将所有字母相同的单词放在同一 key 中;
图解:
复杂度:
时间复杂度:O(nklogk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度;需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk);
空间复杂度:O(nk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度,需要用哈希表存储全部字符串;
代码实现:
function groupAnagrams(strs: string[]): string[][] {
let map: Map<string, Array<string>> = new Map();
for (let i = 0; i < strs.length; i++) {
// 将字母排序后用作 map key,如 'eve' => 'eev', 'vee' => 'eev'
let key = strs[i].split("").sort().join("");
if (!map.has(key)) {
map.set(key, []);
}
map.get(key).push(strs[i]);
}
return [...map.values()];
}
var groupAnagrams = function (strs) {
let map = new Map();
for (let i = 0; i < strs.length; i++) {
// 将字母排序后用作 map key,如 'eve' => 'eev', 'vee' => 'eev'
let key = strs[i].split('').sort().join('');
if (!map.has(key)) {
map.set(key, []);
}
map.get(key).push(strs[i]);
}
return [...map.values()];
};
leetcode🧑💻 220. 存在重复元素 III
上一篇