#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string longestPalindrome(const string & s)
{
// dynamic programming
const int len = s.size();
if (len <= 1)
{
return s;
}
else
{
int lengest = 1;
int start = 0;
vector<vector<bool>> dp(len, vector<bool>(len, false));
for (int i = 0; i < len; ++i)
{
dp[i][i] = true;
if (i < len - 1)
{
if (s[i] == s[i + 1])
{
dp[i][i + 1] = true;
start = i;
lengest = 2;
}
}
}
for (int l = 3; l <= len; ++l)
{
for (int i = 0; i + l - 1 < len; ++i)
{
int j = l + i - 1;
if (s[i] == s[j] && dp[i+1][j - 1])
{
dp[i][j] = true;
start = i;
lengest = l;
}
}
}
return s.substr(start, lengest);
}
}
int main()
{
string str("abbacda");
cout << "The full string : " << str << endl;
cout << "The longest sub_string : " << longestPalindrome(str) << " , and the length is : " << longestPalindrome(str).size() << endl;
return 0;
}
【C++代码】最长回文子串-DP解法
最新推荐文章于 2023-06-29 15:16:49 发布