Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
O(n)时间复杂度,窗口滑动解决,遍历字符串,打访问标记,记录最大长度,如果有访问过(v),则从窗口左边开始寻找重复访问过的字符,
找到后,该重复字符之前的字符设置为未访问过(关键),新窗口左边从该重复字符串下一位开始,右边从(v)的下一位开始,重新寻找最大长度不重
复字符子串。
int lengthOfLongestSubstring(string s) {
int maxlen,tmplen;
maxlen=tmplen=0;
int i,j;
i=j=0;
bool set[128]={false};
while(j<s.size()){
if(set[s[j]]==false){
set[s[j]]=true;
j++;
}
else{
while(s[i]!=s[j]){
set[s[i]]=false;
i++;
}
i++;
j++;
}
tmplen=j-i;
maxlen=tmplen>maxlen?tmplen:maxlen;
}
return maxlen;
}