算法笔记 P95 例题:【codeup5901】回文串

算法笔记练习 题解合集

题目链接

题目

题目描述
读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

输入
一行字符串,长度不超过255。

输出
如果是回文串,输出“YES”,否则输出“NO”。

样例输入 Copy
12321
样例输出 Copy
YES

思路

第一反应是用指针来做。即用两个初始分别指向首元素和尾元素的指针来遍历字符串,判断是否相等,若不等则跳出遍历。

AC之后看到书上是用数组下标做的,感觉确实简洁一点,于是又改了一遍。

还有一个细节是书上用 gets() 来读入字符串,while 的条件要相应变为 while ( gets (str) )

代码

指针版本

#include 
#include 
#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 
#include 
#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;
} 

你可能感兴趣的:(算法笔记,字符串,算法)