最长公共字序列
来源:互联网 发布:诺基亚衰落的原因知乎 编辑:程序博客网 时间:2024/06/06 04:10
最长公共子序列
时限:1000ms 内存限制:200000K 总时限:3000ms
描述
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1, x2,…, xm>,则另一序列Z=<z1, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列 <i1, i2,…, ik>,使得对于所有j=1,2,…,k有:
Xij = Zj
如果一个序列S即是A的子序列又是B的子序列,则称S是A、B的公共子序列。
求A、B所有公共子序列中最长的序列的长度。
Xij = Zj
如果一个序列S即是A的子序列又是B的子序列,则称S是A、B的公共子序列。
求A、B所有公共子序列中最长的序列的长度。
输入
输入共两行,每行一个由字母和数字组成的字符串,代表序列A、B。A、B的长度不超过200个字符。
输出
一个整数,表示最长各个子序列的长度。
格式:printf("%d\n");
格式:printf("%d\n");
输入样例
programming
contest
contest
输出样例
2
提示
C++代码:
#include<stdio.h>
#include<string.h>using namespace std;
int lcs_length(char x[],char y[]);
int main()
{
char x[200],y[200];
int len;
scanf("%s%s",x,y);
len=lcs_length(x,y);
printf("%d\n",len);
}
int lcs_length(char x[],char y[])
{
int m,n,i,j,l[200][200];
m=strlen(x);//jisuan zifuchuan changdu
n=strlen(y);
for(i=0; i<m+1; i++)
l[i][0]=0;
for(j=0; j<n+1; j++)
l[0][j]=0;
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
if(x[i-1]==y[j-1])
{
l[i][j]=l[i-1][j-1]+1;
}
else
if(l[i][j-1]>l[i-1][j])
{
l[i][j]=l[i][j-1];
}
else
l[i][j]=l[i-1][j];
}
return l[m][n];
}
1 0
- 最长公共字序列
- 最长公共字序列.cpp
- 最长公共子字序列和最长公共子字符串
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 《VR入门系列教程》之5---应用方向
- c++第五次实验——求和
- Coincidence
- hdu4090 双重dfs模拟 + 启发式搜索
- 修改oracle awr修改信息收集频率
- 最长公共字序列
- Android基础 | Activity间进行数据传递
- SQL Server 别名数据类型
- 《VR入门系列教程》之6---VR硬件介绍及DK1
- C++实验5——数组分离
- Ubuntu, Mac 下 Web 开发环境搭建:node.js, golang 与 revel 配置安装
- NSString拼接
- Leetcode 142. Linked List Cycle II
- 棒棒的