摘要:无重复字符的最长子串的题目是笔试中比较常见的的题目,难度中等;一般要求都是求得无重复得字符串长度就行,但更难一点就是要求出子串结果;本文算法思想:滑动窗口思想,具体实现要用到双指针+set集合;使用set集合保存子串,两个指针指向字串的前后位置;此外,想要返回结果字符串则需额外两个变量标记最长字串的位置,最后截取最长字串返回结果。
算法思想:
使用i,j双指针标记字串开头和结尾位置,借助set集合存储字串;滑动窗口思想动态更新set集合,以及最长子串的大小max;为了获取最长子串,使用left和right标记最长子串的开始位置和结束位置。最后使用substring(left,right+1)获取结果字符串;
代码:
- function getSubString(s){
- let max = 0, j = 0;
- let set = new Set();
- let left = 0, right = 0;
- for(let i=0;i
length;i++){ - if(!set.has(s[i])){
- set.add(s[i]);
- if(max
size){ - max = set.size;
- left = j;
- right = i;
- }
- }else{
- while(set.has(s[i])){
- set.delete(s[j]);
- j++;
- }
- set.add(s[i]);
- }
- }
- console.log(max);
- // console.log(left);
- // console.log(right);
- console.log(s.substring(left, right+1));
- return max;
- }
-
- const s = "abcdafcg"
- const s2 = "pwwkew"
- getSubString(s);
- getSubString(s2);
'运行
结果:
