一、题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
提示:
- 1 <= strs.length <= 10^4^
- 0 <= strs[i].length <= 100
- strs[i] 仅包含小写字母
二、题解
思路:
- 将原始字符串转化为有序字符串(字符串->数组split() -> 排序sort()->字符串join())
- 遍历字符串数组,并将字符串存入map中 (key:有序字符串,val:包含原始字符串的数组)
js
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
const strMap = new Map( );
strs.forEach(val => {
const newStr = val.split('').sort().join('');
if(strMap.has(newStr)){
strMap.set(newStr,[...strMap.get(newStr),val]);
}else{
strMap.set(newStr,[val]);
}
})
const res = [];
for (const [key,val] of strMap) {
res.push(val);
}
return res;
};
优化
js
const res = [];
for (const [key,val] of strMap) {
res.push(val);
}
return res;
利用map的values()
方法,可以简化为
js
return Array.from(strMap.values());
三、补充
数组和字符串的转换
字符串-->数组 ('apple'
-> ['a', 'p', 'p', 'l', 'e']
)
- str.split('')
- Array.from(str)
数组 --> 字符串
- arr.join() 默认逗号分隔
['a', 'p', 'p', 'l', 'e']
->'a,p,p,l,e'
- arr.join('')
['a', 'p', 'p', 'l', 'e']
->'apple'
- arr.toString()默认逗号分隔
['a', 'p', 'p', 'l', 'e']
->'a,p,p,l,e'
Map的 values()方法
Map 实例的 values() 方法返回一个新的 map 迭代器对象,该对象包含此 map 中每个元素的值,按插入顺序排列。
js
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
const mapIter = myMap.values();
console.log(mapIter.next().value); // "foo"
console.log(mapIter.next().value); // "bar"
console.log(mapIter.next().value); // "baz"
console.log(Array.from(myMap.values())); // ["foo", "bar", "baz"]