int lengthOfLongestSubstring(string s) {
int n = s.length();
int i = 0, j = 0; //i表示当前搜索串的起始位置,j表示当前搜索串的结束位置
int maxLen = 0;
bool exist[256] = { false }; //表示当前字符在当前搜索串中有没有出现
while (j < n) {
if (exist[s[j]]) { //如果当前串中出现了该字符
maxLen = max(maxLen, j-i); //计算当前字符的长度,如果大于原来的最大长度,则把它赋值给最大长度
while (s[i] != s[j]) { //例如当前串为bacd,i指向b,j指向字符a
exist[s[i]] = false; //这种情况下就需要把b标志为不在当前串中,起始位置后移,重新扫描新子串
i++;
}
i++;
j++;
} else { //当前字符如果在搜索串中没有出现 ,标记它为当前串中的字符
exist[s[j]] = true;
j++;
}
}
maxLen = max(maxLen, n-i); //空串和字符串的情况
return maxLen;
}
int n = s.length();
int i = 0, j = 0; //i表示当前搜索串的起始位置,j表示当前搜索串的结束位置
int maxLen = 0;
bool exist[256] = { false }; //表示当前字符在当前搜索串中有没有出现
while (j < n) {
if (exist[s[j]]) { //如果当前串中出现了该字符
maxLen = max(maxLen, j-i); //计算当前字符的长度,如果大于原来的最大长度,则把它赋值给最大长度
while (s[i] != s[j]) { //例如当前串为bacd,i指向b,j指向字符a
exist[s[i]] = false; //这种情况下就需要把b标志为不在当前串中,起始位置后移,重新扫描新子串
i++;
}
i++;
j++;
} else { //当前字符如果在搜索串中没有出现 ,标记它为当前串中的字符
exist[s[j]] = true;
j++;
}
}
maxLen = max(maxLen, n-i); //空串和字符串的情况
return maxLen;
}