算法笔记 P95 例题:【codeup5901】回文串
题目
题目描述
读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
输入
一行字符串,长度不超过255。
输出
如果是回文串,输出“YES”,否则输出“NO”。
样例输入 Copy
12321
样例输出 Copy
YES
思路
第一反应是用指针来做。即用两个初始分别指向首元素和尾元素的指针来遍历字符串,判断是否相等,若不等则跳出遍历。
AC之后看到书上是用数组下标做的,感觉确实简洁一点,于是又改了一遍。
还有一个细节是书上用 gets() 来读入字符串,while 的条件要相应变为 while ( gets (str) )
代码
指针版本
#include <stdio.h>
#include <string.h>
#define MAX 300
int main(){
char input[MAX];
char *pb, *pe;
int flag = 1;
while (scanf("%s", input) != EOF){
pb = input;
pe = input + strlen(input) - 1;
flag = 1;
while (pb < pe){
if (*pb++ != *pe--){
flag = 0;
break;
}
}
if (flag)
puts("YES");
else
puts("NO");
}
return 0;
}
下标版本:
#include <stdio.h>
#include <string.h>
#define MAX 300
int main(){
char input[MAX];
int len, i;
int flag = 1;
while (scanf("%s", input) != EOF){
len = strlen(input);
flag = 1;
for (i = 0; i < len / 2; ++i){
if (input[i] != input[len-i-1]){
flag = 0;
break;
}
}
if (flag)
puts("YES");
else
puts("NO");
}
return 0;
}