题目描述:

Find a longest common subsequence of two strings.

输入:

First and second line of each input case contain two strings of lowercase character a…z. There are no spaces before, inside or after the strings. Lengths of strings do not exceed 100.

输出:

For each case, output k – the length of a longest common subsequence in one line.

样例输入:
abcd
cxbydz
样例输出:
2
 #include <iostream>
#include<string.h>
#include<cstdio>
#define MAX(a,b) a>b?a:b
#define N 200
using namespace std; int main()
{
char str1[N];
char str2[N];
int line[N][N];
while(scanf("%s %s",str1,str2)!=EOF){
int len1=strlen(str1);
int len2=strlen(str2); for(int i=;i<=len1;i++)//初始化
line[i][]=;
for(int j=;j<=len2;j++)
line[][j]=;
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
if(str1[i-]!=str2[j-])//当前两个字符不相等
line[i][j]=MAX(line[i][j-],line[i-][j]);
else
line[i][j]=line[i-][j-]+;//相等加一
}
}
printf("%d\n",line[len1][len2]); }
return ;
}

分析:line[x][y]求得str1前x个字符组成地前缀子串和str2前y个字符组成的前缀子串的最长公共子序列长度。

若str1[x]==str2[y],即str1中的第x个字符和str2的第y个字符相同,同时由于它们都是各自前缀子串的最后一个字符,那么必存在一个最长公共子串以str1[x]或str2[y]结尾,其他部分等价于str1中前x-1个字符和str2中前y-1个字符的最长公共子串。所以这个子串的长度比line[x-1][y-1]又增加1;

若str1[x]!=str2[y],此时其最长公共子串长度为str1中前x-1个字符和str2中前y个字符的最长公共子串长度与str1中前x-1个字符和str2中前y个字符的最长公共子串长度与str1中前x个字符和str2中前y-1个字符的最长公共子串长度的较大者,即两种情况下得到的最长公共子串都不会因为其中一个字符串又增加了一个字符长度发生改变。

总结:最长公共子序列问题的递推条件:

line[0][j](0<=j<=m)=0;

line[i][0](0<=i<=n)=0;

line[i][j]=line[i-1][j-1]+1;(str1[i]==str2[j])

line[i][j]=max{line[i-1][j],line[i][j-1]};(str[i]!=str2[j])

Coincidence (动态规划求最长公共子序列)(王道)的更多相关文章

  1. HDU 1243 反恐训练营 (动态规划求最长公共子序列)

    反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  2. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  3. 九度OJ 1042 Coincidence -- 动态规划(最长公共子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1042 题目描述: Find a longest common subsequence of two strings ...

  4. [algorithm]求最长公共子序列问题

    最直白方法:时间复杂度是O(n3), 空间复杂度是常数 reference:http://blog.csdn.net/monkeyandy/article/details/7957263 /** ** ...

  5. HDU 1159 Common Subsequence (动态规划、最长公共子序列)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. HDU 4681 string 求最长公共子序列的简单DP+暴力枚举

    先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...

  7. 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解

    问题描述: 这个问题其实很容易理解.就是给你两个序列X={x1,x2,x3......xm} Y={y1,y2,y3......ym},要求找出X和Y的一个最长的公共子序列. 例:Xi={A, B, ...

  8. Java实现 LeetCode 583 两个字符串的删除操作(求最长公共子序列问题)

    583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...

  9. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

随机推荐

  1. P1489 猫狗大战

    P1489 猫狗大战 题目描述 新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只 ...

  2. Django remedy a security issue refer dos attack

    Today the Django team is issuing multiple releases -- Django 1.4.8, Django 1.5.4, and Django 1.6 bet ...

  3. OfficeAddin基础

    运行的机器制

  4. selenium 难定位元素,时间插件,下拉框定位,string包含,定位列表中的一个,技巧

    关于frame: 如果网页存在iframe的话,传统的定位有时候找不到元素,需要切换frame: # 切换到leftFrame定位“测井设计” driver.switch_to_frame(" ...

  5. poj1789 最小生成树

    题目连接:http://poj.org/problem?id=1789 Description Advanced Cargo Movement, Ltd. uses trucks of differe ...

  6. python编码问题 与 代码换行问题

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ python程序对于unicode码的支持情况不同 python3 支持较好,在文件开头加入如下 ...

  7. Python3 数字

    layout: post title: Python3 数字 author: "luowentaoaa" catalog: true tags: mathjax: true Pyt ...

  8. P1162 填涂颜色 洛谷

    题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  9. ZOJ 2112 Dynamic Rankings (动态第 K 大)(树状数组套主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  10. [BZOJ 1407] Savage

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 Solution: 由于此题里n的范围很小,因此可以直接从小到大枚举m 那么问题转 ...