#include <iostream>
using namespace std;
#define N 1000
bool f[N][N]; //f[i][j]表示[i,j]是否是回文子串
string longestPalindrome(string s)
{
int n = s.size();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
f[i][j] = false;
}
}
int maxLen = 1, start = 0; //子串长度,起点
for (int i = 0; i < n; i++)
{
f[i][i] = true; //单个字符是回文子串
for (int j = 0; j < i; j++) //[j,i]是不是回文子串
{
f[j][i] = (s[j] == s[i] && (i-j < 2 || f[j+1][i-1]));
if (f[j][i] && maxLen < (i - j + 1)) //i-j+1是[j,i]的长度
{
maxLen = i - j + 1;
start = j;
}
}
}
return s.substr(start, maxLen);
}
int main()
{
string s = "aaabcdcbabcdaa";
cout << longestPalindrome(s).c_str() << endl;
return 0 ;
}
最长回文(倒过来一样)子串(连续)
最新推荐文章于 2022-12-08 12:12:44 发布