简单dp,就是求最长连续不相等的子串,只需遍历即可,
i从0--n遍历:(s1-s2为当前的子串,max为当前最长子串)
1,如果不等与s1--s2内的任何字符,s2++;i++;
2,如果等于x(s1<x<s2),则(如果s2-s1大于max,更新max值)令s1=x,s2=i,i++继续搜寻;
#include<stdio.h>
char a[10000003];
int main()
{
int n,i,k,s1,s2,max,f,x1,x2;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",a);
s1=s2=x1=x2=0;
max=1;
for(i=1;a[i]!='\0';i++)
{
f=1;
for(k=s2;k>=s1;k--) //判断是否与s1-s2中的字符相等
{
if(a[k]==a[i]) //相等
{
if(s2-s1+1>max)//如果子串比当前最大子串大,更新最大子串max;
{
x1=s1;
x2=s2;
max=s2-s1+1;
}
s1=k+1; //当前子串为k-i;赋值给s1,s2,继续查找;
s2=i;
f=0;
break;
}
}
if(f) //如果都不等,当前子串增加1;
s2++;
}
if(s2-s1+1>max)
{
x1=s1;
x2=s2;
max=s2-s1+1;
}
printf("%d %d %d\n",max,x1,x2);
}
return 0;
}