双指针实现滑动窗口,窗口内为不重复子字符串,每次循环取最大的长度。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s.empty()) return 0;
int maxLength = 0;
int st = 0; //st表示滑动窗口左侧
unordered_set<char> hash;
for (int i = 0; i < s.length(); ++ i) //i表示滑动窗口右侧
{
while (hash.find(s[i]) != hash.end()) //窗口内出现重复字符时
{
hash.erase(s[st ++ ]); //去除重复,左侧窗口右移
}
hash.insert(s[i]);
maxLength = max(maxLength, i - st + 1); //更新最大长度
}
return maxLength;
}
};