• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

陈体胖

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

算法笔记 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;
} 

posted on 2020-03-23 23:51  陈体胖  阅读(123)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3