链接:https://ac.nowcoder.com/acm/contest/5758/J
来源:牛客网
题目描述
有一个字符串s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。
请问给出一个字符串他的ac串最大长度为多少
请问给出一个字符串他的ac串最大长度为多少
输入描述:
输入数据第一行是t,表示数据的组数,接下来每组数据输入一个字符串s
(t<=10,s<=1e5)
输出描述:
输出最大长度
示例1
说明
aaaab的ac串是aaa(2:4)
acac的ac串是ac(3:4)
思路:根据题意可知,字串不含首字符,所以寻找最长字串可以直接从下表为1的位置开始,然后向后遍历,相同标记加1,指针向后移,每次移动都更新最长的子串长度,直至将整个字符串遍历结束。
1 #include<stdio.h> 2 #include<string.h> 3 int max(int a,int b){ 4 return a>b?a:b; 5 } 6 int main() 7 { 8 int t,i,j,k,l,flag=0,mflag=0; 9 char s[100000]; 10 scanf("%d",&t); 11 if(t<=0){ 12 printf("0"); 13 return 0; 14 } 15 for(i=0;i<t;i++){ 16 scanf("%s",s); 17 for(j=0,k=1;k<strlen(s);k++){ 18 j=0; 19 for(l=k;l<strlen(s)&&j<strlen(s);l++,j++){ 20 if(s[j]==s[l]){ 21 flag++; 22 mflag=max(mflag,flag); 23 if(l>=strlen(s)){ 24 flag=0; 25 break; 26 } 27 continue; 28 } 29 flag=0; 30 break; 31 } 32 } 33 printf("%d ",mflag); 34 mflag=0; 35 } 36 return 0; 37 }