DP问题---添加字符把字符串变为回文字符串

来源:互联网 发布:webdriver执行js方法 编辑:程序博客网 时间:2024/06/06 09:13

问题详情

把一个字符串变成回文串,最少要添加几个字符?

求解思路

动态规划思路求解

设字符串为s,f[i,j] 为将s[i,j]变为回文字符串需要添加的最少字符数

则有递推方程如下:

f[i,j] = 0; if(i>=j)f[i,j] = f[i+1,j-1]; if(i<j && s[i] == s[j])f[i,j] = min(f[i+1,j],f[i,j-1]) +1 ; if(i < j && s[i] != s[j])

解题代码

#include<iostream>#include<cstring>#include<string>#include<cstdlib>#include<cmath>using namespace std;#define MAXSIZE 100int f[MAXSIZE][MAXSIZE];int main(){    string s;    while(cin >> s){        memset(f,0,sizeof(f));        for (int i = s.length() - 1; i >= 0; --i)        {            for (int j = i+1; j < s.length(); j++)            {                if(s[i] == s[j])                    f[i][j] = f[i+1][j-1];                else                {                    f[i][j] = min(f[i+1][j],f[i][j-1]) + 1;                }            }        }        cout<<f[0][s.length()-1]<<endl;     }    return 0;}
1 0
原创粉丝点击