算法笔记 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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值