目录
1,题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
2,代码
2.1利用数组排序作为键名
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
const map = new Map();
for(let str of strs){
// 将字符串转换为数组
let array = Array.from(str);
// 利用数组排序
array.sort();
// 将排序后的数组转变为字符串
const key = array.toString();
let list = map.get(key)?map.get(key):new Array();
list.push(str);
// 字母异位词所用的单词为键名 字母异位字符串数组作为键值
map.set(key,list);
}
return Array.from(map.values())
};
将数组转换为字符串可以使用
toString()
方法或join()
方法。
toString()
- 用法: 直接调用,不接受任何参数。
- 行为: 将数组中的元素转换为字符串,并用逗号
,
分隔各元素。- 示例:
['apple', 'banana', 'cherry'].toString()
会返回"apple,banana,cherry"
。- 特点:
- 简单直接,不需要指定分隔符。
- 不提供自定义分隔符的选项,只能使用默认的逗号分隔符。
join()
- 用法: 调用时可以指定一个字符串作为分隔符。
- 行为: 将数组中的所有元素转换为字符串,并使用指定的分隔符连接起来。如果没有指定分隔符,则默认使用逗号
,
。- 示例:
['apple', 'banana', 'cherry'].join()
会返回"apple,banana,cherry"
,与toString()
相同。['apple', 'banana', 'cherry'].join(' - ')
会返回"apple - banana - cherry"
,这里使用了' - '
作为分隔符。- 特点:
- 提供了更灵活的选项,可以自定义分隔符。
- 如果数组中某些元素是
undefined
或null
,这些值会被转换为空字符串。
将字符串转换为数组的常见方法包括
Array.from()
和string.split();
Array.from()
直接表示从一个可迭代对象(在这个例子中是字符串)创建一个新数组。它的意图非常直观——创建一个数组的副本。str.split('')
通过将字符串分割成单独的字符来创建数组。虽然这里的分隔符是空字符串,意味着按每个字符分割,但其初衷是用于分割字符串,而非单纯地转换数据类型。
2.2计数实现
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
const map = new Object();
for(let str of strs){
// 根据该题目题意 仅包含小写字母
const count = new Array(26).fill(0);
for(let c of str){
count[c.charCodeAt() - 'a'.charCodeAt()]++;
}
map[count] ? map[count].push(str) : map[count] = [str];
}
return Object.values(map);
};
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
则 map的结构如下:
{
"1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0": ["eat", "tea", "ate"],
"1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0": ["tan", "nat"],
"1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0": ["bat"]
}
3,学习与总结
排序数组 练习对Map数据结构相关方法的使用;