例如:
输入一个字符串:avbghvhv
先找两个相同字符串就是 1位置的v 和 最后一个v
那么它两之间最长子字符串长度就是 avbghvhv :5
代码实现:
const str = 'avbghvhv';
const longestSub = (str = '') => {
const map = new Map();
let max = -1;
for(let i = 0; i < str.length; i++){
if(map.has(str.charAt(i))){ //如果map里面包含了当前字符再计算最大值,否则,直到访问到第二个v的时候,i=5
max = Math.max(max, i - map.get(str.charAt(i)) - 1);//max=Math.max(-1,5-map.get('v')-1)=Math.max(-1,5-1-1)=3
}else{
map.set(str.charAt(i), i);//不包含就将字母写入map,map里面相当于存放的是去重的字符
};
};
console.log(map,'oooo')
return max;
};
console.log(longestSub(str));
JavaScript charAt() 方法:
var str = "HELLO WORLD";
var n = str.charAt(2);// 输出 L
JavaScript中的Map方法:
Map 对象存有键值对,其中的键可以是任何数据类型。
Map 对象记得键的原始插入顺序。
Map 对象具有表示映射大小的属性。
Map.has()
如果 Map 中存在键,则 Map.has() 返回 true:
Map.clear()
Map.clear() 从 Map 中移除所有元素:
map.clear();Map.delete()
Map.delete() 删除 Map 元素:
Map.size
Map.size 返回 Map 中元素的数量:
map.size;