若一个串正向看和反向看等价,则称做回文串。例如:t,abba,xyzyx均是回文串。
给出一个长度不超过60的字符串,判断是否是回文串。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每行输入一个长度不超过60的字符串(串中不包含空格)。
输出格式:
对于每组测试数据,判断是否是回文串,若是输出“Yes”,否则输出“No”。引号不必输出。
输入样例:
2
abba
abc
输出样例:
Yes
No
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
- 输入变量 T,表示接下来有 T 组测试数据。
- 对于每组测试数据:
- 输入一个字符串 str。
- 定义标志变量 flag 来记录这个字符串是否为回文字符串,初始值为1。
- 使用双指针法,将指针 i 指向字符串开头,将指针 j 指向字符串结尾。如果 str[i] 与 str[j] 不相等,则将 flag 设为0。
- 输出 Yes 或者 No,表示该字符串是否为回文字符串。
思路
#include<stdio.h>
int main()
{
int T,flag,i,j,len; // 定义变量 T 表示测试数据组数,flag表示是否为回文字符串,i,j 分别表示两个指针的位置,len 表示字符串的长度。
char str[61]; // 定义字符数组 str,用于存储输入的字符串。
scanf("%d",&T);
while(T--) // 循环遍历每组测试数据。
{
flag=1; // 将标志变量 flag 初始值设为1,表示初始时该字符串为回文字符串。
scanf("%s",str);
len=strlen(str); // 计算该字符串的长度。
for(i=0,j=len-1;i<j;i++,j--) // 使用双指针法遍历字符串中的每个字符,直到两个指针相遇为止。
{
if(str[i]!=str[j]) // 如果发现当前字符不对称,则将 flag 设为0。
flag=0;
}
if(flag==1) // 如果 flag 为1,表示该字符串为回文字符串。
printf("Yes\n");
else // 否则,表示该字符串不是回文字符串。
printf("No\n");
}
return 0;
}