目录
1,题目
2,代码
2.1利用数组排序作为键名
2.2计数实现
3,学习与总结
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数据结构相关方法的使用;