每次記錄一個區間長度,當新加入的字符與它相等的最近字符的位置小於區間起點時,區間長度加1。
則更新區間,遍歷一遍找到最大區間
#include<stdio.h>
#include<string.h>
int n,mark[150];
char str[10000010];
int main()
{
int i,x,len,ss,llen;
while(scanf("%d",&n)!=-1)
{
memset(mark,-1,sizeof(mark));//記錄字符出現的位置
scanf("%s",str);
len=llen=0;x=ss=0;
for(i=0;i<n;i++)
{
if(mark[str[i]]<ss)//如果字符上次出現的位置在區間外,區間+1
llen++;
else
{
if(llen>len)//更新最大區間
{
len=llen;
x=ss;
}
ss=mark[str[i]]+1;//新起點
llen=i-ss+1;//新區間長度
}
mark[str[i]]=i;
}
if(llen>len)
{
len=llen;
x=ss;
}
printf("%d %d %d\n",len,x,x+len-1);
}
}