思路
- 使用同向双指针实现滑动窗口
- 移动右指针
- 当窗口有重复字符移动左指针
- 记录最长子串长度——移动左指针之前
- 注意当无重复的情况下,左指针不移动,len不被更新
代码
class Solution {
public:
unordered_map<char, int> cnt;
bool repeat(int &r,string &s) {//判断是否重复
return cnt[s[r]] > 1;
}
int lengthOfLongestSubstring(string s) {
int l = 0, r = -1, len = 0;
while (r < int(s.length())) {
++cnt[s[++r]];//右指针移动
while(repeat(r,s)&&l<=r){//有重复 左指针移动
len = len < r - l ? r - l : len;
--cnt[s[l]];++l;
}
}
return r-l>len? r-l:len;
}
};
本文介绍了一种使用同向双指针的方法来解决字符串中滑动窗口问题,着重讲解了如何通过移动右指针并检测重复字符来找到最长无重复字符子串的长度。通过实例代码展示了如何在`Solution`类中实现这一过程。
344

被折叠的 条评论
为什么被折叠?



