当前位置: 首页 > news >正文

最长公共子串 NYOJ 36

http://acm.nyist.net/JudgeOnline/problem.php?pid=36

最长公共子序列

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 3
 
描述
咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。
tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。
 
输入
第一行给出一个整数N(0<N<100)表示待测数据组数
接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于1000.
输出
每组测试数据输出一个整数,表示最长公共子序列长度。每组结果占一行。
样例输入
2
asdf
adfsd
123abc
abc123abc
样例输出
3
6
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 int f[1010][1010];//DP数组
 5 int b[1010][1010];//记录方向
 6 int n,m;//字符串的长
 7 void lcs(char x[],char y[],int m,int n)
 8 {
 9     int i,j;
10     for(i=0;i<=m;i++)
11         f[i][0]=0;
12     for(j=0;j<=n;j++)
13         f[0][j]=0;
14     for(i=1;i<=m;i++)
15     {
16         for(j=1;j<=n;j++)
17         {
18             if(x[i-1]==y[j-1])
19             {
20                 f[i][j]=f[i-1][j-1]+1;
21                 b[i][j]=0;//左上
22             }
23             else if(f[i-1][j]>=f[i][j-1])
24             {
25                 f[i][j]=f[i-1][j];
26                 b[i][j]=1;//
27             }
28             else
29             {
30                 f[i][j]=f[i][j-1];
31                 b[i][j]=-1;//
32             }
33         }
34     }
35 }
36 void printlcs(char x[],int i,int j)
37 {
38     if(i==0||j==0)
39         return;
40     if(b[i][j]==0)
41     {
42         printlcs(x,i-1,j-1);
43         printf("%c",x[i-1]);
44     }
45     else if(b[i][j]==1)
46     {
47         printlcs(x,i-1,j);
48     }
49     else
50         printlcs(x,i,j-1);
51 }
52 int main()
53 {
54     int t,i;
55     char x[1001],y[1001];
56     scanf("%d",&t);
57     while(t--)
58     {
59         scanf("%s %s",x,y);
60         int m=strlen(x),n=strlen(y);
61         lcs(x,y,m,n);
62         printf("最长公共子串是:\n");
63         printlcs(x,m,n);
64         printf("\n长度是:\n");
65         printf("%d\n",f[m][n]);
66     }
67     system("pause");
68     return 0;
69 }
View Code

 

相关文章:

  • 第一个Shader的更新,增加爆光度, 属性改为数值型(更直观,精确)
  • linuxdeepin 启动器启动之后出现白屏 的解决办法
  • js 事件详解 冒泡
  • simple-spring-memcached简介
  • [SPOJ]COT2
  • 设置时间
  • 28次课(使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令)
  • 错误:update 忘了加 where
  • 编程常用动词细微差别
  • lpeg学习笔记- -
  • nslookup工具的使用方法
  • 菜鸟入门【ASP.NET Core】2:部署到IIS
  • 23种简洁好看的扁平化模板
  • TransE论文剩余部分
  • 《Effective C++》 笔记:Tips01-Tips04
  • “大数据应用场景”之隔壁老王(连载四)
  • 【面试系列】之二:关于js原型
  • Computed property XXX was assigned to but it has no setter
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA SE 6 GC调优笔记
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java-详解HashMap
  • react 代码优化(一) ——事件处理
  • Redis中的lru算法实现
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SQLServer之创建数据库快照
  • vuex 笔记整理
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 面试遇到的一些题
  • 如何利用MongoDB打造TOP榜小程序
  • 用 Swift 编写面向协议的视图
  • 2017年360最后一道编程题
  • scrapy中间件源码分析及常用中间件大全
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​flutter 代码混淆
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $GOPATH/go.mod exists but should not goland
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (zt)最盛行的警世狂言(爆笑)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)Linux——Linux常用指令
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)创业的注意事项
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .aanva
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .Net Core 中间件验签
  • .NET Reactor简单使用教程
  • .NET 表达式计算:Expression Evaluator