1.字母异位词:字母相同,但排列不同的字符串。
说明:
①所有输入均为小写字母
②不考虑答案输出的顺序。
2. 规则:
①给你一个字符串数组,请你将 字母异位词 组合在一起,可以按任意顺序返回结果列表。
②字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
3. 示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
方法一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
const strs = ["eat", "tea", "tan", "ate", "nat", "bat"];
var groupAnagrams = function(strs) {
var res = {};
for(var i=0;i<strs.length;i++){
var s = strs[i].split('').sort().join('');
//排序后字母不相同,则初始化数组为空
if(!res[s]){
res[s] = [];
}
res[s].push(strs[i]);
}
return Object.values(res);
};
</script>
</body>
</html>
结果展示:
方法二:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
let groupAnagrams = function(strs) {
let mapObj = new Map(); // 1:定义一个map类型的对象
for (const key of strs) {
let array = Array.from(key); // 2:获取数组里面的每一项的字符串进行拆分
array.sort(); // 3:将数组里面根据字母进行排序
let str = array.toString(); // 4: 将数组变为逗号隔开的字符串
// 5:将排序后的新字符串的数据作为键
// 5-1 如果有这个值,就获取这个键的值放到list数组中
// 5-2 如果mapObj.get()的键找不到会返回undefind,就返回一个空数组
let list = mapObj.get(str) ? mapObj.get(str) : [];
console.log(list);
list.push(key) // 6: 把原数据放到list中
// 7: 将按顺序排序的作为键,将原数据作为值(值为排序键一样的数据)
mapObj.set(str, list)
}
console.log('最终数据', Array.from(mapObj.values()));
// 8: 返回map数据中的迭代数据(遍历)
};
groupAnagrams(strs);
</script>
</body>
</html>
结果展示: