无重复字符的最长字串
描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
思路
双指针维护一段区间
根据ASCII映射,v[i]表示i出现过几次
r<len,循环移动右指针,每次遇到元素,对应v[i]+1,判断该元素出现过几次
若出现过,必然是新增的元素为重复元素,左指针归到右指针上,清除原区间标记
代码
#include<iostream>
using namespace std;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int max_len=0;
int v[256]={0};
int l=0,r=0,len=s.length();
for(r=0;r<len;r++){
v[s[r]]++;
//如果区间有重复元素,必然是新增的右边界,左指针归到右指针上
while(v[s[r]]>1){
v[s[l]]--;
l++;
}
//结束循环后,此区间内元素个数都是1
max_len=max(max_len,r-l+1);
}
return max_len;
}
};