题目要求:
解题思路:
使用两个指针 `index1` 和 `index2` 来维护一个滑动窗口,然后在窗口内查找最长不重复子串的长度。如果在窗口内发现重复字符,就更新指针的位置以继续查找。最终,返回找到的最长不重复子串的长度。
示例代码:
int lengthOfLongestSubstring(string s) {
int max = 0; // 用于存储最长不重复子串的长度
int index1 = 1; // 第一个指针
int index2 = 0; // 第二个指针
if (s.length() == 1) return 1; // 如果字符串只包含一个字符,则返回 1 作为最长不重复子串的长度
if (s[0] == s[1]) max = 1; // 如果字符串的前两个字符相同,将 max 设置为 1
for (int i = index1; i < s.length(); i++) {
int cnt = 1; // 用于计算当前子串的长度,初始化为 1
for (int j = index2; j < i; j++) {
if (s[i] == s[j]) { // 如果当前字符与之前的字符重复
index1 = j + 2; // 更新第一个指针,跳过重复字符的位置
index2 = j + 1; // 更新第二个指针,重新开始计算子串
break; // 退出内层循环
}
cnt++; // 如果字符不重复,增加 cnt 的值
}
if (cnt >= max) {
max = cnt; // 如果当前子串的长度大于等于 max,更新 max 的值
}
}
return max; // 返回最长不重复子串的长度
}