动态规划算法求最长回文子串

回文串就是正着读和反着读一样的字符串,如“abba”,"abcba",最长回文子串是字符串的子串中最长的属于回文串的子串。如字符串"abbaabccba"的最长回文子串为"abccba",本文采用动态规划算法来查找最长回文子串,算法时间复杂度为O(n²)。设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则易得转移方程如下:


则dp[j][i]为true时表示索引j到索引i形成的子串为回文子串,且子串起点索引为i,长度为j+i-1。

具体程序如下:

#include "stdafx.h"
#include 
#include 
using namespace std;
class Solution {
public:
	string longestPalindrome(string s) {
		const int n=s.size();
		bool dp[n][n];
		fill_n(&dp[0][0],n*n,false);
		int max_len=1; //保存最长回文子串长度
		int start=0;//保存最长回文子串起点
		for(int i=0;i>input)
	{
		cout<<"最长回文子串为:"<

输入abbaabccba时,程序运行结果如下:

动态规划算法求最长回文子串_第1张图片


你可能感兴趣的:(数据结构与算法)