解题思路:
\qquad
首先要理解“子串”,是输入字符串s
的连续片段。因此我们可以用双指针来表示,用l, r
分别记录片段的左边界和右边界。同时借助set
快速查找当前片段内的元素。
\qquad
遍历r
从0~字符串长度,每次检查s[r]
的元素是否已存在:若存在,需要移动l
,并移除s[l]
,直至当前s[r]
不再存在于set;若不存在,存储当前s[r]
,同时r
右移1。遍历过程中不断记录左右边界距离的最大值,最后返回输出即可。
int lengthOfLongestSubstring(string s) {
unordered_set<char> pool;
int ans = 0, l = 0, r = 0;
while(r < s.length())
{
while(l < r && pool.count(s[r]) != 0)
{
pool.erase(s[l]);
l++;
}
pool.insert(s[r]);
ans = max(ans, r - l + 1);
r++;
}
return ans;
}