寻找最长无重复字符 (leetcode题 )
//javascript 实现
//创建指针,判断指针位置是否和下一个位置相同,如果相同,重新从下一个位置累加,如果不同,将该字符与已经累加的字符比较。
// 如果存在重复的情况,比较第一个字符到第一个重复字符出现的位置的长度 和 最后一个重复字符到第一个重复字符之间的长度,取较大的一个作为暂时的结果,如果相等取后者。但后者继续累加。
//如果不存在重复的情况,继续累加。
function lengthOfLongestSubstring (s) {
//给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
let newS =s;
let res = 0;
let right = 0;
let left = 0;
let m = new Map()
while(right < s.length && left< s.length){
//如果出现重复字符,且重复字符的位置在left之前而不是之后
if(m.has(s[right]) && m.get(s[right]) >= left){
//比较最大长度(考虑从开始到第一次出现重复字符的情况及重复的字符之间的长度)
res = Math.max(res,right-left);
//获取重复的字符上次的位置,更新left。如果比现在left更小的话,不符合条件
left = m.get(s[right])+1;
//更新Map到本次的位置
m.set(s[right],right)
}else{
//如果不是重复字符
//记录当前index
m.set(s[right],right)
}
//指针继续
right++;
//考虑从最后一个重复字符到尾部的长度
res = Math.max(res,right-left);
}
return res;
};
浙公网安备 33010602011771号