欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最长连续不重复子串

程序员文章站 2022-07-07 15:46:57
...

最长连续不重复子串
最长连续不重复子串
此问题就是寻找一个序列当中最长不重复的子串长度,我们利用双指针,维护一个子序列,保持其中数字不重复,我们将右指针每次向右边移动,就将标记+1,所以,如果右指针遇到重复数字,那么此处的标记就是2.所以,此时需要将做指针右移,将这个重复元素消去,也就是减1,那么这个while循环判断的条件就是右指针的值是否大于1,这个判断循环结束的时候,能够保持这个子串内部的数字都是不重复的

#include<iostream>
#include<algorithm>
using namespace std;

const int N=100010;
int a[N],s[N];

int main(){
    int n;
    cin>>n;
    int res=0;
    for(int i=0;i<n;i++)cin>>a[i];
    
    //i为右指针,j为左指针 
    for(int i=0,j=0;i<n;i++){
        s[a[i]]++;
        while(s[a[i]]>1){//如果发现这个元素在之前已经存在过了,就消除前面那个重复元素 
            s[a[j]]--;//消除前面那个重复的元素 
            j++;	//j最后指向那个重复元素的后面一个,这样从i-j指间就没有重复的元素了 
        }
        res=max(res,i-j+1);
    }
    cout<<res;
    return 0;
}
相关标签: 难题