回文字符串(GESP 标准写法)
作者:野牛程序员:2026-01-18 08:40:18GESP阅读 2021
回文字符串(GESP 标准写法)
回文字符串(GESP 标准写法)
一、什么是回文字符串
回文字符串指的是:
👉 正着读和倒着读完全一样的字符串。
常见示例
| 字符串 | 是否回文 |
|---|---|
aba | 是 |
level | 是 |
abc | 否 |
abca | 否 |
二、GESP 考试中的标准判断思路
GESP 考试强调三点:
输入方式正确
判断逻辑清晰
代码不绕、不炫技
⭐ 标准思路(推荐)
使用
cin.getline输入字符串用 左右指针 比较
中途不相等立即结束
这种写法:
不需要额外数组
不需要反转字符串
错误率最低
三、GESP 标准写法(推荐 ✔)
✅ 双指针直接判断(最标准)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[100];
cin.getline(s, 100);
int len = strlen(s);
bool flag = true;
for (int i = 0; i < len / 2; i++) {
if (s[i] != s[len - 1 - i]) {
flag = false;
break;
}
}
if (flag)
cout << "YES";
else
cout << "NO";
return 0;
}⭐ 这是最符合 GESP 评分习惯的写法
无多余输出
无调试语句
逻辑一步到位
四、写法拆解(考场理解版)
1️⃣ 为什么只循环到 len / 2
只需要比较一半:
a b c b a↑ ↑
中间字符不用比,前后对称即可。
2️⃣ 核心判断条件(必背)
s[i] == s[len - 1 - i]
左边第 i 个
右边倒数第 i+1 个
3️⃣ 为什么要用 break
一旦发现不相等:
已确定不是回文
继续循环毫无意义
提前结束更清晰
五、另一种常见写法(反转法,不首选)
思路说明
把字符串反转到新数组
再逐个字符比较
示例代码(了解即可)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[100], t[100];
cin.getline(s, 100);
int len = strlen(s);
for (int i = 0; i < len; i++) {
t[i] = s[len - 1 - i];
}
t[len] = '\0';
bool flag = true;
for (int i = 0; i < len; i++) {
if (s[i] != t[i]) {
flag = false;
break;
}
}
if (flag)
cout << "YES";
else
cout << "NO";
return 0;
}📌 考试中不如双指针直观、简洁
六、GESP 常见错误总结(重点)
❌ 错误 1:使用 fgets 忘记处理换行符
a b a \n \0
导致比较失败。
❌ 错误 2:循环条件写错
i <= len / 2 // ❌
可能重复比较或越界。
❌ 错误 3:没有提前结束
flag = false; // 没有 break
逻辑虽对,但不规范。
七、GESP 一句话记忆公式(必背)
回文判断
左右同时走
一处不等立刻停
八、考试使用建议
GESP 一级 / 二级:
直接使用“双指针标准写法”字符串题目不加说明:
默认区分大小写、不忽略空格输出要求:
严格按照题目给定(如YES / NO)
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

