最长公共子串
2015-10-24 22:51
337 查看
上次经过dp解决公共子序列,然后找到同类型,最长公共子串,顾名思义,公共子串是连续的序列,做法和公共子序列相似,不过在不相等时要将前面计零,然后在判断中每次更新最大的子串,
来看状态转移方程就差不多了;
X[i] == Y[j],dp[i][j] = dp[i-1][j-1] + 1
X[i] != Y[j],dp[i][j] = 0
初始化i=0||j==0时,dp[i][j]=0;
本代码配有打表,跟着表走一边就差不多明白了,
dp思想也比较浅显,当前情况为上层满足情况加一!
来看状态转移方程就差不多了;
X[i] == Y[j],dp[i][j] = dp[i-1][j-1] + 1
X[i] != Y[j],dp[i][j] = 0
初始化i=0||j==0时,dp[i][j]=0;
#include<stdio.h> #include<string.h> int max(int a,int b) { return a>b?a:b; } int main() { int i,j; int dp[100][100]; char st1[20],st2[20]; int result = 0; scanf("%s%s",st1,st2); int la = strlen(st1); int lb = strlen(st2); for(i=0;i<=la;i++) for(j=0;j<=lb;j++) { if(i==0||j==0) dp[i][j]=0; else if(st1[i]==st2[j]) { dp[i][j]=dp[i-1][j-1]+1; result = max(result,dp[i][j]); } else dp[i][j]=0; } for(i=0;i<la;i++) { for(j=0;j<lb;j++) printf("%d ",dp[i][j]); putchar('\n'); } printf("%d",result); return 0; }
本代码配有打表,跟着表走一边就差不多明白了,
dp思想也比较浅显,当前情况为上层满足情况加一!
相关文章推荐
- SpringIoC初始化BeanDefinition解析——注册
- python开发环境必备之vim配置
- Fedora22修复更新grub2系统引导
- iOS9要求网络使用HTTPS协议-解决办法
- JavaScript获取DOM元素位置和尺寸大小
- 从头认识java-3.2 return break continue
- HA集群之三:corosync+pacemaker实现httpd服务的高可用(crm的用法)
- Android----我所收集的Android学习资源
- Hadoop HDFS copyMergeFromLocal
- 《情感化设计/Emotional Design》中文版序 by Donald Norman
- 《大道至简》第4章读后感
- 006--C++动态内存(简介)
- [转]8 Regular Expressions You Should Know
- 从头认识java-3.2 return break continue
- 认真学习各种语句!!!
- 我的第一次
- LeetCode61——Rotate List
- 我今年23岁
- html中表格table的内容居中显示
- Android jni 编程1(对基本类型字符串的操作)