代码:
思想
s[]用来统计次数 a[]用来存放数据
i和j都指向开始
s[a[i]]用来统计 a[]个数
s[a[j]]用来剔除 连续的 重复的子串的个数
最后 s[a[i]] s[a[j]]一加一减,s[]得到的就是题目要求的 连续的不重复的子串的个数
开始
i++,当i走到第二个时,s[a[i]]=2 (因为2出现了两次)
那么j++,同时s[a[j]]--,剔除1出现的次数:
然后,此时重复值为2, j++;
i和j区间内没有重复值了,i++。接下来一直都没有重复值,i一直++,一直到末尾:
#include<iostream>
using namespace std;
const int N=100010;
int a[N],s[N]; //a存输入数据 s是计数器
int main()
{
int n=0; int res=0;
cin>>n;
//输入数据
for(int i=0;i<n;i++)
{
cin>>a[i];
}
//开始比较
for(int i=0,j=0;i<n;i++)
{
s[a[i]]++;
while(s[a[i]]>1)
{
s[a[j]]--;
j++;
}
res=max(res,i-j+1);
}
cout<<res<<endl;
return 0;
}