C++题目描述给定一个字符串输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串比如:abbacccdeedccc都是回文字符串。输入格式一个字符串由字母或数字组成。长度500以内。输出格式输出所有的回文子串每个子串一行。子串长度小的优先输出若长度相等则出现位置靠左的优先输出。输入输出样例样例 1输入样例 复制123321125775165561输出样例 复制3
解题思路:
- 遍历字符串的每个字符,以每个字符为中心向左右扩展,判断是否是回文子串;
- 当回文子串长度大于等于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)
原文地址: http://www.cveoy.top/t/topic/iVjz 著作权归作者所有。请勿转载和采集!