解题思路:

  1. 遍历字符串的每个字符,以每个字符为中心向左右扩展,判断是否是回文子串;
  2. 当回文子串长度大于等于2时,输出回文子串。

C++代码实现如下:

#include <iostream>
#include <string>
using namespace std;

bool isPalindrome(string s, int start, int end) {
    while (start < end) {
        if (s[start] != s[end]) {
            return false;
        }
        start++;
        end--;
    }
    return true;
}

void findPalindrome(string s) {
    int n = s.length();
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (isPalindrome(s, i, j)) {
                cout << s.substr(i, j - i + 1) << endl;
            }
        }
    }
}

int main() {
    string s;
    cin >> s;
    findPalindrome(s);
    return 0;
}

时间复杂度分析: 假设字符串的长度为n,遍历每个字符复杂度为O(n),以每个字符为中心向左右扩展复杂度为O(n),所以总的时间复杂度为O(n^2)

C++题目描述给定一个字符串输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串比如:abbacccdeedccc都是回文字符串。输入格式一个字符串由字母或数字组成。长度500以内。输出格式输出所有的回文子串每个子串一行。子串长度小的优先输出若长度相等则出现位置靠左的优先输出。输入输出样例样例 1输入样例 复制123321125775165561输出样例 复制3

原文地址: http://www.cveoy.top/t/topic/iVjz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录