最长公共子串 NYOJ 36
http://acm.nyist.net/JudgeOnline/problem.php?pid=36
最长公共子序列
- 描述
 - 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 
- 输入
 - 第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000. - 输出
 - 每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
 - 样例输入
 - 
2
asdf
adfsd
123abc
abc123abc - 样例输出
 - 
3
6#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int f[][];//DP数组
int b[][];//记录方向
int n,m;//字符串的长
void lcs(char x[],char y[],int m,int n)
{
int i,j;
for(i=;i<=m;i++)
f[i][]=;
for(j=;j<=n;j++)
f[][j]=;
for(i=;i<=m;i++)
{
for(j=;j<=n;j++)
{
if(x[i-]==y[j-])
{
f[i][j]=f[i-][j-]+;
b[i][j]=;//左上
}
else if(f[i-][j]>=f[i][j-])
{
f[i][j]=f[i-][j];
b[i][j]=;//上
}
else
{
f[i][j]=f[i][j-];
b[i][j]=-;//左
}
}
}
}
void printlcs(char x[],int i,int j)
{
if(i==||j==)
return;
if(b[i][j]==)
{
printlcs(x,i-,j-);
printf("%c",x[i-]);
}
else if(b[i][j]==)
{
printlcs(x,i-,j);
}
else
printlcs(x,i,j-);
}
int main()
{
int t,i;
char x[],y[];
scanf("%d",&t);
while(t--)
{
scanf("%s %s",x,y);
int m=strlen(x),n=strlen(y);
lcs(x,y,m,n);
printf("最长公共子串是:\n");
printlcs(x,m,n);
printf("\n长度是:\n");
printf("%d\n",f[m][n]);
}
system("pause");
return ;
} 
最长公共子串 NYOJ 36的更多相关文章
- [Data Structure] LCSs——最长公共子序列和最长公共子串
		
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
 - HDU 1503 带回朔路径的最长公共子串
		
http://acm.hdu.edu.cn/showproblem.php?pid=1503 这道题又WA了好几次 在裸最长公共子串基础上加了回溯功能,就是给三种状态各做一个 不同的标记.dp[n][ ...
 - 最长公共子序列PK最长公共子串
		
1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. (1)递归方法求最长公共子序列的长度 1) ...
 - 动态规划(一)——最长公共子序列和最长公共子串
		
注: 最长公共子序列采用动态规划解决,由于子问题重叠,故采用数组缓存结果,保存最佳取值方向.输出结果时,则自顶向下建立二叉树,自底向上输出,则这过程中没有分叉路,结果唯一. 最长公共子串采用参考串方式 ...
 - 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774
		
Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...
 - 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message
		
Language: Default Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 21 ...
 - POJ 2217 (后缀数组+最长公共子串)
		
题目链接: http://poj.org/problem?id=2217 题目大意: 求两个串的最长公共子串,注意子串是连续的,而子序列可以不连续. 解题思路: 后缀数组解法是这类问题的模板解法. 对 ...
 - poj1159 dp最长公共子串
		
//Accepted 204 KB 891 ms //dp最长公共子串 //dp[i][j]=max(dp[i-1][j],dp[i][j-1]) //dp[i][j]=max(dp[i][j],dp ...
 - HDU 1403 Longest Common Substring(后缀数组,最长公共子串)
		
hdu题目 poj题目 参考了 罗穗骞的论文<后缀数组——处理字符串的有力工具> 题意:求两个序列的最长公共子串 思路:后缀数组经典题目之一(模版题) //后缀数组sa:将s的n个后缀从小 ...
 
随机推荐
- javascript继承(二)—创建对象的三种模式
			
一.工厂模式 function createPerson(name,age){ var o = {}; o.name = name; o.age = age; o.sayHi = function() ...
 - Jquery实现异步上传图片
			
利用jQuery的ajax函数就可以实现异步上传图片了.一开始我是想在处理程序中,直接用context.Request.Files来获取页面中的input file,但是不知道为什么一次获取不了.网上 ...
 - SimpleDateFormat出错
			
今天写了一个SB代码,就是字符串“2014-04-03”转换为java.sql.Date.因为java.sql.Date extends java.util.Date.所以一般的思路是先将String ...
 - HTML DOM 基础
			
$. HTML DOM 定义了访问和操作 HTML 文档的标准方法. DOM 是 W3C(万维网联盟)的标准. $. DOM树. $. W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它 ...
 - 转-JS中document对象详解
			
对象属性 document.title //设置文档标题等价于HTML的<title>标签 document.bgColor //设置页面背景色 document.fgColor //设置 ...
 - 【HDU 2222】Keywords Search AC自动机模板题
			
参考iwtwiioi的模板写出来的.上午gty讲的并没有听懂,只好自己慢慢对着模板理解. 在HDU上为什么相同的程序提交有时T有时A!!! 奉上sth神犇的模板(不是这道题): var ch:char ...
 - 【bzoj1191】 HNOI2006—超级英雄Hero
			
http://www.lydsy.com/JudgeOnline/problem.php?id=1191 (题目链接) 题意 有m个问题,n个锦囊妙计,每个锦囊妙计可以解决一个问题,每个问题有两个锦囊 ...
 - POJ2286 The Rotation Game
			
Description The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see ...
 - poj 1845     数论综合
			
题意:求A^B的所有因数的和 mod 9901 sol:一开始毫无思路,因为很多定理都不知道-_-|| 1. 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. A=(p1^ ...
 - mysql 高级查询
			
高级查询:1.连接查询select * from Info,Nation #这是两个表名,中间用逗号隔开形成笛卡尔积select * from Info,Nation where Info.natio ...