面试题48 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
显然是滑动窗口
class Solution {
public:
int vis[300];
int lengthOfLongestSubstring(string s) {
int cnt = 0;
int max = 0;
int startPos = 0;
for(int i=0; i<300; i++) vis[i] = 0;
for(int i=0; i<s.size(); i++) {
if(vis[s[i]] == 0)
{
vis[s[i]] += 1;
cnt ++;
}
else {
while(s[startPos]!=s[i]) {
vis[s[startPos]] --;
startPos++;
}
vis[s[startPos]] --;
startPos++;
vis[s[i]] += 1;
if(cnt>=max) max = cnt;
cnt = i-startPos+1;
}
if(i==s.size()-1 && cnt>max) max = cnt;
}
return max;
}
};