【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 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
 本文由作者按照  CC BY-NC-SA 4.0  进行授权
