假设有一个串 abcd 那么它的子串为ab abc abcd
现输入一串带有相同子串的串,(例:abciiiabc),请求出他的最长子串(abc)
样例输入: abciopuabcuiu
abciabcoabccjiabcc
样例输出:3
4
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
/*
1.先从中间向下切入,用串的总长度除以2,可以保证左边是最长,不管是偶数串还是奇数串。
2.然后以切入的那个数n,求 0~n-1 这一串的匹配,如果一旦匹配上,必定就是最长子串了。
*/
void main(){
char a[100];
int i,j,k,l,len,temp,flag;
gets(a);
len = strlen(a);
for(i=len/2;i>=0;i--)//因为是周期串,所以不可能存在子串重叠的情况,从中间切入,可以保证左边是最长
{
for(k=i;k+(i-1)<len;k++){
flag=1;
for(j=k;j<k+i;j++){
//重点,j每次要向前挪k-i个长度的位置
if(a[j]!=a[(j-(k-i))%i]){
flag=0;
break;
}
}
if(flag==1){
printf("%d",i);
break;
}
}
if(flag==1){
break;
}
}
}
博主扣扣 1139178694 欢迎探讨