无重复字符的最长子串

题目链接

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

解题思路

先确定大思路:
移动右端点直到区间内有重复字符;
再移动左端点直到区间内无重复字符。
也就是说右端点的移动条件是区间内不存在重复字符,移动右端点是为了尽可能扩大区间,找到最大解;
而左端点移动条件是区间内存在重复字符,移动左端点是为了缩小区间,保证区间满足要求。

AC代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        map<char,int> cnt;
        int n=s.size(),ans=0,count=0;
        s='.'+s;
        //核心代码
        for(int R=1,L=1;R<=n;R++){//控制右端点移动
            if(++cnt[s[R]]==1) ++count;//区间内无当前字符,count++
            while(count!=R-L+1){//区间内存在重复字符
                if(--cnt[s[L]]==0) --count;//区间内无当前字符,count--
                L++;//只要区间内有重复字符(即while条件满足),L++,控制左端点移动
            }
            ans=max(ans,R-L+1);//区间内无重复字符时,刷新答案
        }

        return ans;
    }
};
全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务