如果直接暴力容易超时,这里采用2个变量i,j表示字符串左和右;如果s[j]是重复的,那么vis[s[i]]--,i向右移动一位。
#include<cstring>
class Solution {public:
int lengthOfLongestSubstring(string s) {
int i=0,j=0;
int maxlen=0;
int vis[266];
memset(vis,0,sizeof(vis));
while(i<=j&&j<s.size()){
if(!vis[s[j]]){
vis[s[j]]=1;
j++;
}
else
{
if(j-i>maxlen)maxlen=j-i;
vis[s[i]]--;
i++;
}
}
if(j-i>maxlen)maxlen=j-i;
return maxlen;
}
};