动态规划算法之寻找最长回文数串

       给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输出需要删除的字符个数。

本题可转化为动态规划算法求解最长公共子序列问题,然后用总字符串长度减去最长子序列长度,便得出问题的答案。

先将给定的初始字符串S1反过来排列,设为S2,求S1和S2的最长公共子序列便可。C++代码如下:


#include 
#include 
#include 
using namespace std;

int temp[100][100];

void caculate(string s1){
	string s2(s1);
	reverse(s2.begin(), s2.end());
	int len = s1.length();
	memset(temp, 0, sizeof(temp));
	for (int i = 0; i



程序运行结果如下:

动态规划算法之寻找最长回文数串_第1张图片

你可能感兴趣的:(C++,算法,动态规划)