d.求对字符串最少添加几个字符可变为回文串。 s. 简单做法是直接对它和它的逆序串求最长公共子序列长度len。n-len即为所求。(n为原串长度) 这样做的原因如下: 要求最少添加几个字符,我们可以先从原串中找到一个最长回文串,然后对于原串中不属于这个回文串的字符,在它关于回文串中心的对称位置添加一
分类:
其他好文 时间:
2016-03-16 22:36:09
阅读次数:
204
首先,说明一下子序列的定义…… 一个序列A={a1,a2,a3,...,an},从中删除任意若干项,剩余的序列叫A的一个子序列。 很明显(并不明显……),子序列……并不需要元素是连续的……(一开始的时候思维总是以为元素是连续的,好傻啊……) 然后是公共子序列…… 如果C是A的子序列,也是B的子序列,
分类:
其他好文 时间:
2016-03-08 23:54:51
阅读次数:
312
这道题被51Nod定为基础题(这要求有点高啊),我感觉应该可以算作一级或者二级题目,主要原因不是动态规划的状态转移方程的问题,而是需要理解最后的回溯算法。
分类:
编程语言 时间:
2016-03-06 13:00:50
阅读次数:
226
给定两个字符串S和T.求出这两个字符串最长的公共子序列的长度. 输入: n=4 m=4 s="abcd" t="becd" 输出: 3("bcd") 这类问题被称为最长公共子序列问题(LCS,Longest Common Subsequence)的著名问题. max(dp[i][j]+1,dp[i]
分类:
其他好文 时间:
2016-03-01 20:41:23
阅读次数:
116
题目链接:http://poj.org/problem?id=1458 解题报告: 1、用二维数组模拟两个字符串上每个子串对应的最长公共子序列。 2、显然,就是要求二维数组最右下的数字 3、递推公式: if(s1[i-1]==s2[j-1]) maxlen[i][j]=maxlen[i-1][j-1
分类:
其他好文 时间:
2016-02-21 12:47:04
阅读次数:
128
题目分析pid=1159">原题地址最简单的最长公共子序列(LCS)问题的模板题了。不解释。------------------------------------------------------------------------状态转移方程:dp[i][j]=dp[i-1][j-1]+1 ....
分类:
其他好文 时间:
2016-01-26 20:23:48
阅读次数:
211
最长公共子序列#include#include#include#includeusing namespace std;const int maxn=1000+10;int a[maxn],b[maxn];int dp[maxn][maxn];char s[maxn];int main(){ w...
分类:
其他好文 时间:
2016-01-17 21:38:01
阅读次数:
201
题目最长公共子串给出两个字符串,找到最长公共子串,并返回其长度。样例给出A=“ABCD”,B=“CBCE”,返回 2注意子串的字符应该连续的出现在原字符串中,这与子序列有所不同。解题注意:子序列:这个序列不是在原字符串中连续的位置,而是有间隔的,如:ABCDE 和AMBMCMDMEM 最长公共子序列...
分类:
其他好文 时间:
2016-01-15 22:36:37
阅读次数:
262
Longest Common Prefix:Write a function to find the longest common prefix string amongst an array of strings. 题意:查找一个字符串数组中的字符串的最长公共子序列。 思路:首先查找字符串数组中,...
分类:
其他好文 时间:
2016-01-10 10:29:45
阅读次数:
137