📅  最后修改于: 2023-12-03 14:59:53.905000             🧑  作者: Mango
本篇介绍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;
}