最长公共连续子串和最长连续公共子序列
来源:互联网 发布:淘宝全屏宝贝推荐代码 编辑:程序博客网 时间:2024/05/18 02:26
最长公共连续子序列
DP求解LCS
用二维数组c[i][j]记录串
public static int lcs(String str1, String str2) { int len1 = str1.length(); int len2 = str2.length(); int c[][] = new int[len1+1][len2+1]; for (int i = 0; i <= len1; i++) { for( int j = 0; j <= len2; j++) { if(i == 0 || j == 0) { c[i][j] = 0; } else if (str1.charAt(i-1) == str2.charAt(j-1)) { c[i][j] = c[i-1][j-1] + 1; } else { c[i][j] = max(c[i - 1][j], c[i][j - 1]); } } } return c[len1][len2];}
DP求解最长公共子串
前面提到了子串是一种特殊的子序列,因此同样可以用DP来解决。定义数组的存储含义对于后面推导转移方程显得尤为重要,糟糕的数组定义会导致异常繁杂的转移方程。考虑到子串的连续性,将二维数组
得到转移方程:
最长公共子串的长度为
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>using namespace std;char a[55],b[55];int main(){gets(a);gets(b);int len1=strlen(a);int len2=strlen(b);int result=0;int dp[55][55];memset(dp,0,sizeof(int));for(int i=0;i<=len1;i++){for(int j=0;j<=len2;j++){if(i==0 || j==0){dp[i][j]=0;}else if(a[i-1]==b[j-1]){dp[i][j]=dp[i-1][j-1]+1;result=max(dp[i][j],result);}else{dp[i][j]=0;}}}printf("%d\n",result);return 0;}
阅读全文
0 0
- 最长连续公共子序列
- 最长连续公共子序列
- 最长公共子序列(连续)
- 最长公共连续子串和最长连续公共子序列
- 最长连续公共最长子序列
- 最长公共子序列VS最长连续公共子序列
- 最长公共连续子串
- 最长公共连续子串
- 最长连续公共子串
- 最长公共子序列(LCS)和最长公共连续子串
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- 经典字符串算法 “最长上升子序列,最大连续子序列和,最长公共子串”
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 常见编程——最长公共子序列(不连续)和最长公共子串(连续)
- 最长递增子序列(nlogn),最长公共子串(连续),最长公共子序列(不连续)
- poj1458(DP最长连续公共子序列)
- 最长公共子序列(连续)
- 最长公共子序列(不需要连续)
- 格林时间:Thu May 18 2017 00:00:00 GMT+0800 (中国标准时间) 格式转换
- pycharm中安装Anaconda
- 网络故障总汇
- 第3章 计算机的物质基础
- 天南地北话“事务”
- 最长公共连续子串和最长连续公共子序列
- 数据库基本概念
- (转)写一个网页进度loading
- [日常练习]算
- 单例模式singleton —— II
- Convert BST to Greater Tree
- Android APP架构思考
- 805A Fake NP
- 选择排序(C语言实现)