csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:判断字符串是否为回文

题目描述
输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
输入格式
输入一行字符串,长度小于 100 100 100。
输出格式
如果字符串是回文,输出 yes;否则,输出 no。
输入输出样例 1
输入 1
abcdedcba
输出 1
yes
思路分析(方法1)
要判断一个字符串是否为回文,只需比较字符串的第 i 个字符与倒数第 i 个字符是否相等,直到中间位置。
- 读取整行字符串(可能包含空格)。
- 使用双指针
i(头)和j(尾),初始i = 0,j = s.length() - 1。 - 循环条件
i < j,每次比较s[i]与s[j]:- 若不同,输出
no并结束程序。 - 若相同,
i++,j--继续比较。
- 若不同,输出
- 循环正常结束说明是回文,输出
yes。
代码实现(方法1)
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
getline(cin, s);//读取整行字符串
int i = 0, j = s.size() - 1;//双指针指向首尾
while (i < j) {
if (s[i] != s[j]) {//对应字符不同
cout << "no" << endl;
return 0;
}
i++;//左指针右移
j--;//右指针左移
}
cout << "yes" << endl;
return 0;
}
功能分析(方法1)
-
输入处理 :使用
getline读取整行,允许字符串中包含空格,符合题目"一行字符串"的描述。 -
回文判断 :双指针从两端向中间逐个字符比较,一旦发现不相等立即输出
no并退出;若全部相等则输出yes。 -
时间复杂度:O(n),n 为字符串长度,最大 100,效率极高。
-
空间复杂度:O(1),仅使用了常数个额外变量。
思路分析(方法2)
使用 reverse 方法:
- 读取原始字符串
s。 - 将其复制到另一个字符串
t中。 - 反转
t。 - 比较
s与t是否相等:- 相等则输出
yes - 否则输出
no
- 相等则输出
这种方法简单直观,直接利用 STL 的 reverse 函数。
代码实现(方法2)
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s, t;
getline(cin, s); //读取原字符串
t = s; //复制到t
reverse(t.begin(), t.end()); //反转t
if (s == t) //比较原串与反转串
cout << "yes" << endl;
else
cout << "no" << endl;
return 0;
}
功能分析(方法2)
- 输入 :使用
getline读取一行,支持空格。 - 处理 :
reverse将字符串首尾颠倒,时间复杂度 O(n)。 - 判断:直接比较原串与反转串是否相等,简单可靠。
- 输出 :符合题目要求的
yes或no。
【完整系列请查看专栏】:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
各种学习资料,助力大家一站式学习和提升!!!
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++提高组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}