最长回文子串

来源:互联网 发布:python和大数据挖掘 编辑:程序博客网 时间:2024/06/06 00:21

str="abcdddddddddcf",则最长回文子串为"cdddddddddc"。

方法一:

先将字符串反转,得到str2,再寻找str1与str2的最大公共子串。

最大公共子串参考: 

两个字符串的最大公共子序列和最大公共子串


方法二:

用动态规划做,

DP[i][j]表示str[i...j]形成的最长回文子串的长度。

#include<iostream>#include <vector>#include <assert.h>#include <string>using namespace std;vector<char> MaxSubStr(const char *str){int size = strlen(str);vector<vector<int>> DP(size, vector<int>(size, 0));int begin=0, end=0;int max = 1;for (int i = 0; i < size - 1; i++) DP[i][i] = 1;for (int i = 0; i < size - 1; i++){if (str[i] == str[i + 1]) DP[i][i + 1] = 2;}for (int len = 3; len <= size; len++)for (int i = 0; i <= size - len; i++){if (str[i] == str[i + len - 1]) DP[i][i + len - 1] = DP[i + 1][i + len - 2] + 2;else DP[i][i + len - 1] = 0;if (DP[i][i + len - 1] > max){max = DP[i][i + len - 1];begin = i;end = i + len - 1;}}vector<char> result(str + begin, str + end + 1);return result;}int main(void){vector<char> re = MaxSubStr("abababababa");for (int i = 0; i < re.size(); i++)cout << re[i];cout << endl;return(0);} 


0 0
原创粉丝点击