【GESP】C++三级练习 luogu-B2124 判断字符串是否为回文
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2124 判断字符串是否为回文
题目要求
题目描述
输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
输入格式
输入一行字符串,长度小于 $100$。
输出格式
如果字符串是回文,输出
yes
;否则,输出no
。
输入输出样例 #1
输入 #1
1
abcdedcba
输出 #1
1
yes
题目分析
解题思路
- 读取一个字符串
- 使用双指针法从字符串两端向中间遍历:
- 左指针从字符串开头向右移动
- 右指针从字符串末尾向左移动
- 比较两个指针指向的字符是否相同:
- 如果不同,则不是回文串
- 如果相同,继续移动指针
- 如果所有字符比较完毕且都相同,则是回文串
复杂度分析:
- 时间复杂度为 $O(n)$,其中n为输入字符串的长度
- 空间复杂度为 $O(1)$,只需要常数级额外空间
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
int main() {
// 定义字符串变量用于存储输入
std::string input;
// 从标准输入读取字符串
std::cin >> input;
// 定义两个指针,分别指向字符串的开始和结束
int begin = 0;
int end = input.length() - 1;
// 从两端向中间遍历比较字符
while (begin < end) {
// 如果对应位置的字符不相等,说明不是回文
if (input[begin] != input[end]) {
std::cout << "no";
return 0;
} else {
// 字符相等,继续向中间移动
begin++;
end--;
}
}
// 所有字符都比较完且相等,是回文
std::cout << "yes";
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权