c++ 的set解法
https://blog.csdn.net/qq_31820761/article/details/90611418
如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()==0){
return 0;
}
int ans=1;
int start=0;
int end=1; // 最长字串下表
set<char>a;
a.insert(s[start]);
while(end<s.length()){
if(a.find(s[end])!=a.end()){
a.erase(s[start++]);
}else{
a.insert(s[end++]);
ans=max(ans,end-start);
}
}
return ans;
}
};
解法二
首先设置子字符串边界,初始时最小子字符串边界为i=0;j=1;
每次将右边界加一,直到右边界达到end;
并在每次扩大右边界时,遍历字符串,使i从start到end之间的子串中有无字符的值与s[end]相等,即出现重复字符是s[i]。
如果出现重复字符,则改变start的值为i+1;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()==0){
return 0;
}
int ans=1;
int start=0;
int end=1; // 最长字串下表
while(end<s.length()){
for(int i=start;i<end;i++){
if(s[i]==s[end]){
start=i+1;
break;
}
}
end++;
ans=max(ans,end-start);
}
return ans;
}
};