[ACM_动态规划] Palindrome

简介:


http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/D

 

题目大意:给一个长为n的字符串,问最少插入几个字符成回文串

解题思路:总长-最长公共(原来的和其倒过来的串)子序列(LCS) 

知识详解——LCS:给出两个子序列A,B,求长度最大的公共子序列(如152687和2356984——>568或268);不妨设d(i,j)为A,B的LCS,   则最有子结构为::A[i]=B[j]时,d(i,j)=d(i-1,j-1)+1;否则,d(i,j)=max{d(i-1,j),d(i,j-1)};复杂度为O(m*n),也可用滚动数组法优化。

  View Code

 

 

注意: 上面的代码虽然实现了求解,但是 由于开了一个c[2005][2005]的数组所以不幸Memory Limit Exceeded”,通过观察不难发

其最优子结构中每次计算只用到两层数据,因此可以考录建立一个c[2][2005]的动态表来节省空间,代码如下:
  View Code

 

 

标签:  LCS最长公共子序列


本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/3245558.html ,如需转载请自行联系原作者
相关文章
|
7月前
|
算法
poj 1159 Palindrome(最长公共子串)
关于求最长公共子串, 用到的是动态规划
15 0
|
8月前
|
算法
The kth great number(小根堆思想,模板题)
The kth great number(小根堆思想,模板题)
23 0
The kth great number(小根堆思想,模板题)
|
9月前
|
机器学习/深度学习 存储 缓存
Lecture 3:动态规划
Lecture 3:动态规划
|
11月前
|
C++
【PAT甲级 - C++题解】1071 Speech Patterns
【PAT甲级 - C++题解】1071 Speech Patterns
42 0
|
算法 索引
LeetCode 214. Shortest Palindrome
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
59 0
LeetCode 214. Shortest Palindrome
LeetCode 409. Longest Palindrome
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
54 0
LeetCode 409. Longest Palindrome
|
索引
LeetCode 392. Is Subsequence
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
66 0
LeetCode 392. Is Subsequence
AtCoder Beginner Contest 203(Sponsored by Panasonic) D.Pond(二分+二维前缀和)
AtCoder Beginner Contest 203(Sponsored by Panasonic) D.Pond(二分+二维前缀和)
65 0
HDU 4632 Palindrome subsequence(动态规划)
HDU 4632 Palindrome subsequence(动态规划)
55 0
HDU 4632 Palindrome subsequence(动态规划)