【力扣刷题】3. 无重复字符的最长子串-滑动窗口

给定一个字符串 s ,请你找出其中不含有重复字符的 最长  的长度。

 

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。   请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

 

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

思路:定l和r指针,不断地滑动r,如果窗口中有重复的字段就滑动l,将r归位

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n=s.size();
        if(n==1)return 1;
        int l=0,r=l+1,cnt=1,ans=0;
        while(r<n){
            bool f=0;
            for(int i=l;i<r;i++){
                // cout<<s[i]<<" ";
                if(s[i]==s[r]){
                    f=1;
                    break;
                }
            }
            // cout<<endl<<cnt<<endl;
            if(!f){
                cnt++;
                r++;
            }if(f||r==n){
                l++;
                r=l+1;
                ans=max(ans,cnt);
                cnt=1;
            }
        }
        return ans;
    }
};

 

版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/571
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录