问题描述
给定一个正整数N和一个由小写英文字母组成的长度N的字符串S。确定该字符串是否是某个字符串的两个副本的连接。也就是说,确定是否存在一个字符串T使S=T+T。如果S是某个字符串的两个副本的连接,则输出Yes;否则,直接输出No。
输入示例
6 abcabc
输出示例
Yes
//12.2-01
#include <stdio.h>
int main()
{
int len,i;
int flag =0;//用来判断
scanf("%d",&len);
char a[len];
/*答案给出的选项是a[len+1],实际测试不+1也行 */
scanf("%s",a);
if(len%2 == 0){
for(i=0;i<(len/2);i++)
{
if(a[i]!=a[(len/2)+i])
{
flag = 1;
break;
}
}
if(flag==1) printf("NO\n");
else printf("YES\n");
}
else printf("NO\n");
return 0;
}
思路
其实这个题还是很简单滴~
S = T+T 可以看出若满足该条件肯定是偶数长度的字符串
二分以后再逐个比较,有不一致就break
然后根据flag的值判断即可