文章

【GESP】C++三级练习 luogu-B2124 判断字符串是否为回文

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。

luogu-B2124 判断字符串是否为回文

题目要求

题目描述

输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。

输入格式

输入一行字符串,长度小于 $100$。

输出格式

如果字符串是回文,输出 yes;否则,输出 no

输入输出样例 #1

输入 #1

1
abcdedcba

输出 #1

1
yes

题目分析

解题思路

  1. 读取一个字符串
  2. 使用双指针法从字符串两端向中间遍历:
    • 左指针从字符串开头向右移动
    • 右指针从字符串末尾向左移动
    • 比较两个指针指向的字符是否相同:
      • 如果不同,则不是回文串
      • 如果相同,继续移动指针
  3. 如果所有字符比较完毕且都相同,则是回文串

复杂度分析:

  • 时间复杂度为 $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 进行授权