3.无重复字符的最长子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
滑动窗口
双指针+映射
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i=0,j=0,k=0,ml=0;
map<char,int> cs;
int tmp=0;
while(j<s.size()){
auto it=cs.find(s[j]);
if(it==cs.end()){
cs[s[j]]=j;
tmp++;
ml=max(ml,tmp);
}
else{
int t=cs[s[j]];
for(k=i;k<=t;k++){
cs.erase(s[k]);
tmp--;
}
cs[s[j]]=j;
tmp++;
i=t+1;
}
j++;
}
//if(j==i+26)return 26;
return ml;
}
};
双指针+数组,减少映射操作时间。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i=0,j=0,k=0,ml=0;
vector<int> cs(256,-1);
int tmp=0;
while(j<s.size()){
int t=cs[s[j]];
if(t==-1){
cs[s[j]]=j;
tmp++;
ml=max(ml,tmp);
}
else{
for(k=i;k<=t;k++){
cs[s[k]]=-1;
tmp--;
}
cs[s[j]]=j;
tmp++;
i=t+1;
}
j++;
}
return ml;
}
};