J 最大值

链接:https://ac.nowcoder.com/acm/contest/5758/J
来源:牛客网

题目描述

有一个字符串s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。
请问给出一个字符串他的ac串最大长度为多少

输入描述:

输入数据第一行是t,表示数据的组数,接下来每组数据输入一个字符串s
(t<=10,s<=1e5)

输出描述:

输出最大长度
示例1

输入

复制
2
aaaaa
abacc

输出

复制
4
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 }
原文地址:https://www.cnblogs.com/woju/p/13022514.html