xtuoj co-string
题目
思路
依照题意,co-string就是以该串的中线为轴,左右两边完全相等(不是轴对称)的串,比如123123就是一个co-string。
题目要求找到最长的co-string子串的长度2*i,所以我们从大到小找,依次验证大的那个是否满足。显然i最大为len/2,最小为0。首先假设当前的i满足条件,found=1,然后验证。我们枚举所有可能的开头j,j从0到len-2*i,如果j大于len-2*i,则右边是不可能存在长度为2*i的子串。我们要检验所有字符是否对应,所以设置一个偏移量j,j从0到i,检查的就是j+k与j+k+i对应字符是否相等,如果不等,则立马可以舍弃,将之前设置为满足条件的改为不满足条件,found=0,检查下一个。如果找完了,但是found还是没有被改为0的话,那我们就找到了,答案就是2*i。
代码
#include<stdio.h>
#include<string.h>char s[1005];
int len,n,found,ans;int main(){int K;scanf("%d",&K);while(K--){scanf("%s",s);len=strlen(s);n=len/2;for(int i=n;i>=1;i--){for(int j=0;j<=len-2*i;j++){found=1;for(int k=0;k<i;k++){if(s[j+k]!=s[j+k+i]){found=0;break;}}if(found){ans=2*i;break;}}if(found) break;}printf("%d\n",ans);}return 0;
}