📜  CBSE Class 11 C++样本论文3(1)

📅  最后修改于: 2023-12-03 14:59:53.905000             🧑  作者: Mango

CBSE Class 11 C++样本论文3

本篇介绍CBSE Class 11 C++样本论文3,主要涉及内容包括以下几个方面:

  • 题目描述
  • 代码分析
  • 代码实现
  • 代码片段
题目描述

给定一组字符串,将其中所有的回文字符串找出并输出。

回文字符串的定义是正序和倒序的结果相同,比如"level"就是一个回文字符串。

代码分析

本题可以采用暴力枚举的方法,对于每个字符串,枚举其所有的子串,然后判断其是否为回文字符串。

判断是否为回文字符串可以采用双指针的方法,即分别从字符串的首尾往中间逐一比较字符,如果相同则继续比较,如果不同则说明该字符串不是回文字符串。

代码实现

下面是本题的C++代码实现,其中使用了string类型的substr函数来获取子串,使用了双指针来判断是否为回文字符串:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

bool isPalindrome(string s) {
    int left = 0, right = s.size() - 1;
    while (left < right) {
        if (s[left] != s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

int main() {
    int n;
    vector<string> strs;
    cin >> n;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        strs.push_back(s);
    }
    for (int i = 0; i < strs.size(); i++) {
        for (int j = 0; j < strs[i].size(); j++) {
            for (int k = j; k < strs[i].size(); k++) {
                string sub = strs[i].substr(j, k-j+1);
                if (isPalindrome(sub)) {
                    cout << sub << endl;
                }
            }
        }
    }
    return 0;
}

代码片段

下面是本题的代码片段,其中展示了判断是否为回文字符串的函数isPalindrome的实现:

bool isPalindrome(string s) {
    int left = 0, right = s.size() - 1;
    while (left < right) {
        if (s[left] != s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}