Bob的老师给了他一些字符串,需要他去找出其中一个最长的且没有重复元素的子串。
输入格式
Bob的老师给的长度不超过100000的字符串。
包含多组输入数据,输入以一行#结束。
输出格式
对于每一个字符串,找到其中最长的、没有重复元素的子字符串,然后按下述格式输出一行: 先输出子字符串的长度,然后输出一个空格,最后输出这个子字符串。 如果有多个同样符合要求的子字符串,输出第一个。
样例输入
abcdefabc abababa abcabcafec #
样例输出
6 abcdef 2 ab 5 bcafe
#include<stdio.h>
#include<string.h>
char str[100002];
int l,ans,max,w,pos[258];
int maxi(int a,int b){
return a>b?a:b;
}
int main(){
int i;
while(scanf("%s",&str)!=EOF){
if(strcmp("#",str)==0)
break;
l=strlen(str);
memset(pos,0,sizeof(pos));
ans=1;max=0;w=0;
for(i=1;i<=l;i++){
if(i-maxi(w,pos[str[i-1]])>max){
ans=w+1;
max=i-maxi(w,pos[str[i-1]]);
}
if(pos[str[i-1]]!=0){
w=maxi(w,pos[str[i-1]]);
}
pos[str[i-1]]=i;
}
printf("%d ",max);
for(i=ans;i<ans+max;i++)
printf("%c",str[i-1]);
printf("\n");
}
return 0;
}