滑动窗口方法解决子字符串匹配问题

滑动窗口方法解决子字符串匹配问题

3. 无重复字符的最长子串

思路

维护一个初始化为0的滑动窗口,并设置左右指针(初始时均指向第0个字符),循环移动右指针,当新移动到的字符出现在窗口内时,将左指针后移以便缩小窗口。如果没有出现过则扩大窗口。

代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        set<char> t;
        int res = 0, left = 0, right = 0;
        while (right < s.size()) {
            if (t.find(s[right]) == t.end()) {
                t.insert(s[right++]);
                res = max(res, (int)t.size());
            }  else {
                t.erase(s[left++]);
            }
        }
        return res;
    }
};

其他疑惑

当字符串形如“pwwkww”的形状时,left=0,right=1,set内保存的时p和w,此时当right继续右滑到2,w在set内出现。作者第一次到这里的时候总觉得此时右移left会出问题,但是实际操作中发现,如果right所指字符在set中出现,此时并没有右移right,仅仅左移left,此时set内只剩下w字符。但是因为right没有动,下一轮循环时right依然是2,w还是在set中出现过,所以左指针会继续右移,set也就被清空了,所以不会出现窗口内有重复字符的情况。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容