本篇是记录力扣刷题总字母异位。涉及到hashmap
- 1、前述介绍:
- 输入形式: [eat,tea,tan,ate,nat,bat]
- 输出形式:[[eat,tea,ate],[tan,nat]]
- 针对上述算法求解有俩种方法:
- 1、第一种是先排序,针对字母排序后每个字符串相等,这种时间复杂度是nlogn,
- 2、本文使用的是方法2:具体的思路如下:
2.1、俩种方法,一种是排序eat->aet,比较简单,非暴力不是最优解,nlogn
2.2、最优解法:
2.3、检查是否为空数组
2.4、建立一个长度为26的数组
2.5、遍历所有的字符串,将字母的出现频率放到数组的对应的位置(利用acsi),
2.6、遍历数组,按照相同字幕出现的频率进行分组归类(利用hashmap)
2.7、 遍历map,将结果返回
- 2、代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
<script>
var groupAngrams=function (strs) {
if(strs.length===0){
return [];
}
const map=new Nap();
for(const str of strs){
const characters=Array(26).fill(0);
for(let i=0;i<str.length;i++){
const ascii=str.charCodeAt(i)-97;
characters[ascii]++;
}
const key=characters.join("");
if(map.has(key)){
map.set(key,map.get(key).push(str));
}else{
map.set(key,[str]);
}
}
const result=[];
for(const arr of map){
result.push(arr[1]);
}
return result;
}
</script>
- 3、总结
本篇介绍了es6的一个语法操作以及在字符转换时候使用ascii中的charcodeAt得到对应的字幕的ascii,通过减去97可以得到当前的索引,算是一个小的trick deal。另外值得存储使用hashmap。看完记得点赞关注和收藏喔。微信搜索:知识图谱NLP可关注公众号。