输出最长回文子串(找到最长回文子串,并输出最长回文子串)

来源:互联网 发布:数据库安全 编辑:程序博客网 时间:2024/06/04 20:06

将一个很长的字符串分割成一段一段的子串,要求子串都是回文串,有回文串就输出最长的,没有回文串就将字符一个个输出。

思路:和之前找字符串的的最长回文子串其实属于一类问题,还是需要先依次遍历整个字符串,找到字符串的最长回文子串。此时就需要返回最长子串的中心位置即最长回文子串的长度(由于需要返回两个值,在此直接在主函数中实现,并不使用函数调用的方式),然后根据最长回文子串的长度是奇数还是偶数,输出最长回文字串就可以了。

#include <iostream>using namespace std;int main( ){int count = 0;int max = 0;//最长回文子串的长度int max_index = 0;//最长回文子串的中心点位置char str[] = "abcdefgh";int n = strlen(str);cout << "字符串的总长度为:" << n << endl;//判断字符串是否为空if (str == NULL || n<1){return 0;}for (int i = 0; i < n; i++){//字符串为奇数时for (int j = 0; (i - j) >= 0 && (i + j)<n; j++){if (str[i - j] != str[i + j]){break;}count = 2 * j + 1;}if (count > max){max = count;max_index = i;}//字符串为偶数时for (int k = 0; (i - k) >= 0 && (i + k + 1) < n; k++){if (str[i - k] != str[i + k + 1]){break;}count = 2 * k + 2;}if (count > max){max = count;max_index = i;}}cout << "最长的回文子串的中心位置:" << max_index << endl;cout << "最长的回文子串的长度是:" << max << endl;if (max ==1){for (int j = 0; j<n; j++){cout << str[j]<<" ";}cout << endl;}if (max % 2 == 1&&max!=1)//最长的回文子串的长度是奇数{//字符串为奇数时for (int j = (max_index - max / 2); j<max; j++){cout << str[j];}cout << endl;}else{//字符串为偶数时for (int j = (max_index - max / 2 + 1); j<max; j++){ cout << str[j];}cout << endl;}return 0;}




1 0
原创粉丝点击