DP问题---添加字符把字符串变为回文字符串
2016-10-17 12:00
253 查看
问题详情
把一个字符串变成回文串,最少要添加几个字符?求解思路
动态规划思路求解设字符串为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 100 int 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; }
相关文章推荐
- 字符串问题---添加最少字符使字符串整体都是回文字符串
- 添加字符成为回文字符串
- UVA11548 DP计算添加多少元素可以构成回文字符串
- POJ-1159(添加一些字符使得字符串对称)(DP+滚动数组)
- 算法基础——判断一个字符串至多添加一个字符之后是否回文
- 添加最少字符使成为回文字符串
- 回文字符串 的添加问题
- 51nod 1092 回文字符串 dp问题
- 判断一个字符串是否能够通过添加一个字符变成回文序列的方法
- 牛客面试算法题精讲【个人总结】- 添加最少字符以使字符串整体都是回文字符串
- dp问题 添加最少的字符构成回文串
- 最长回文字串--------注意一个小点-----添加字符的问题
- 【DP生成回文字符串的最小插入字符数】POJ 1159
- 回文字符串 的添加问题
- Exe7 删除字符串中指定的字符 (还有有问题——指针的问题)
- 动态规划 加最少字符使字符串变回文 POJ 1159 short水过!
- 经典考题——无重复字符问题(查找字符串中第一个无重复字符)
- 将一个字符串的字符序列置为逆序,如将"abcdef"变为"fedcba"
- 动态规划 加最少字符使字符串变回文 POJ 1159 short水过!
- c#操作Excel 一些问题 字符变为null解决方法