题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
假设字符串中只包含从’a’到’z’的字符。
样例
输入:"abcabc"
输出:3
思路
动态维护窗口[i,j]的字符情况
如何维护?保证窗口(i,j)之间没有重复字符
如果没有重复字符,j向右滑动,直到j被“卡住”
向右滑动指针i直到j“解围”,滑动过程中j-i减小,所以不会错过最优解
class Solution {
public:
int longestSubstringWithoutDuplication(string s) {
int answer = 0;
vector<bool> have(256, false);
for(int i = 0, j = 0; ; ++i){
while((j < s.length()) && (!have[s[j]]))
have[s[j++]] = true;
answer = max(answer, j - i);
if(j >= s.length())
break;
while(s[i] != s[j]){
have[s[i++]] = false;
}
have[s[i]] = false;
}
return answer;
}
};