1650: (D)回文串
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 480 Solved: 154
Submit Status Web Board
Description
Input
Output
Sample Input
Sample Output
HINT
A H I M O T U V W X Y
首先再强调一遍认真读题,本题要求的是按中点折叠后能够完全的重合,所以字符串中的
字符必须是A H I M O T U V W X Y这些。
所以读取一个字符串后可以先从头到尾的扫一遍,如果有不是这些字符的就可以直接输出No
再按照回文字符串的比较方法再比较久可以以了。
完整代码如下
#include<stdio.h>
#include<string.h>
int main(void)
{
int top,len,i,k,next,flag,mid;
char a[10010],s[10010];
while(~scanf("%s",a))
{
flag=0;
len = strlen(a);
for(k=0;k<len;k++)
{
if(a[k]!='A'&&a[k]!='H'&&a[k]!='I'&&a[k]!='M'&&a[k]!='O'&&a[k]!='T'&&a[k]!='U'&&a[k]!='V'&&a[k]!='W'&&a[k]!='X'&&a[k]!='Y')
{
flag=1;
printf("No\n");
break;
}
}
if(flag == 0)
{
top = 0;
mid = len/2 - 1;
for(i=0;i<=mid;i++)
{
s[++top] = a[i];//先把前半部分的字符存起来
}
if(len % 2 == 0)
next = mid + 1;//对称的另一个起始点
else
next = mid + 2;
for(i=next;i<len;i++)
{
if(a[i] != s[top])
break;
top--;//这里很关键不能合并
}
if(top == 0)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
如果可以请关注一下我的公众号(会不定时更新一些算法)