0
点赞
收藏
分享

微信扫一扫

LeetCode编程每日一题(C++)——无重复最长子串

小禹说财 2022-02-12 阅读 10

在这里插入图片描述
在这里插入图片描述

对于该问题,是寻找一个连续的无重复字符串,解决思路为一个大的for循环,遍历子串左端点坐标,中间套一while循环,对右端点后的若干个字符依次进行判定,若未曾出现在子串中则insert进子串。需要注意的是,对于for中的每一次循环,需要将左端点向右移动,即去除上一阶段的最左段的字符,或在本阶段提前去除该阶段的最左端元素。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> occ;
        int len = s.size();
        int rk = -1;
        int ans = 0;
        for (int i=0; i<len; i++){
            //移除上一次循环中的左端点
            // if(i != 0){
            //     occ.erase(s[i-1]);
            // }
            // 不断右移右端点
            while (rk+1<len && !occ.count(s[rk+1])){
                occ.insert(s[rk+1]);
                rk ++;
            }
            // 也可为下阶段的过程,移除本阶段的左端点
            occ.erase(s[i]);
            ans = max(ans,rk-i+1);
        }
        return ans;
    }
};
举报

相关推荐

0 条评论