【算法题】最长回文子序列
来源:互联网 发布:淘宝家乡版怎么切换 编辑:程序博客网 时间:2024/05/22 15:30
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:
对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:
abcda输出例子:
2
2
动态规划:f[i][j]表示以i为头,j为尾的字符串删除字符可得的最长回文串长度。
则状态转移方程为:
#include <iostream>#include <vector>#include <string>#include <numeric>#include<algorithm>using namespace std;int main(){ string str; while (cin >> str) { int count(0); int size = str.size(); vector<vector<int>> dp; dp.resize(size); for (auto i = 0; i < size; ++i) { dp[i].resize(size); } for (auto i = 0; i < size; ++i)//i==j时 { dp[i][i] = 1; } for (auto i = 0; i < size-1; ++i)//(j-i==1)时 { dp[i][i+1] = 1; if (str[i] == str[i + 1]) { dp[i][i + 1] = 2; } } int j; for (auto len = 2; len < size; ++len)//2~(size-1) { for (auto i = 0; i < size - len; ++i) { j = i + len; dp[i][j] = max(dp[i][j-1],dp[i+1][j]);//状态转移 if (str[i] == str[j]) { dp[i][j] = max(dp[i][j],dp[i+1][j-1]+2);//状态转移 } } } cout << size-dp[0][size-1]<<endl; } return 0;}
阅读全文
0 0
- 【算法题】最长回文子序列
- 最长回文子序列 递归算法
- 算法导论-最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 最长回文子序列
- 算法导论—最长回文子串和子序列
- poj_3974最长回文子序列基础题
- 算法学习【动态规划】----最长回文子串&最长回文子序列
- 最长回文子序列:字符串反转+动态规划,最长公共子序列LCS算法
- 最长公共子序列LCS和最长回文子序列的动态规划算法
- nyoj-37 回文字符串(最长公共子序列算法应用
- 算法导论15.2 最长回文子序列 Longest palindrome subsequence
- 经典算法——最长回文子序列
- 实用的悬浮窗工具类
- Servlet笔记
- PLSQL查询了表的数据之后怎么插入数据。
- Centos Docker registry push异常问题
- Mybatis的sql动态查询小技巧(极客)
- 【算法题】最长回文子序列
- Java 统一异常处理
- 杂记
- Auto Ware 代码解析系列-astar_planner节点
- 凤凰视频真实视频地址解析
- R语言置换检验
- Pthreads多线程编程(2)
- 管道的原子性
- Poj