最长公共子串和最长公共子序列(LCS)
来源:互联网 发布:程序员健康问题 编辑:程序博客网 时间:2024/06/05 03:14
区别:最长公共子串要求求得的子串是连续的,而最长公共子序列则没有这个限制。
求解公式:
最长公共子串:1.str1[i]==str2[j]:dp[i][j]=dp[i-1][j-1]+1;2.else:dp[i][j]=0;最长公共子序列:1.str1[i]==str2[j]:dp[i][j]=dp[i-1][j-1]+1;2.else:dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
最长公共子串:
int dp[2][100010];/*字符串读入方式:cin>>&str1[1]>>&str2[1];*/int lcs(char str1[],char str2[]){ int maxVal=0; int len1=strlen(&str1[1]); int len2=strlen(&str2[1]); memset(dp,0,sizeof(dp)); //采用滚动数组,节省内存 for(int i=1;i<=len1;i++) { for(int j=1;j<=len2;j++) { if(str1[i]==str2[j]) dp[i%2][j]=dp[(i-1)%2][j-1]+1,maxVal=max(maxVal,dp[i%2][j]); else dp[i%2][j]=0; } } return maxVal;}
int dp[2][100010];/*字符串读入方式:cin>>&str1[1]>>&str2[1];*/int lcs(char str1[],char str2[]){ int len1=strlen(&str1[1]); int len2=strlen(&str2[1]); memset(dp,0,sizeof(dp)); //采用滚动数组,节省内存 for(int i=1;i<=len1;i++) { for(int j=1;j<=len2;j++) { if(str1[i]==str2[j]) dp[i%2][j]=dp[(i-1)%2][j-1]+1; else dp[i%2][j]=max(dp[(i-1)%2][j],dp[i%2][j-1]); } } return dp[len1%2][len2];}
0 0
- 最长公共子序列LCS和最长子串SLCS
- 最长公共子序列(LCS)和最长公共子串(LCSubString)
- LCS 最长公共子序列&最长公共子串
- 最长公共子串和最长公共子序列(LCS)
- 最长公共子序列(LCS)和最长公共连续子串
- 最长公共子序列(LCS)和最长公共子串(LCS)
- LCS:最长公共子序列
- LCS---最长公共子序列
- 最长公共子序列 LCS
- LCS -- 最长公共子序列
- LCS最长公共子序列
- 最长公共子序列LCS
- LCS-最长公共子序列
- 最长公共子序列 LCS
- 最长公共子序列(LCS)
- 最长公共子序列(LCS)
- 最长公共子序列LCS
- LCS最长公共子序列
- String与StringBuffer的区别
- 电路与Multisim基础 NPN型三极管的简单放大电路示例
- 内存对齐三原则
- Response对象
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- 最长公共子串和最长公共子序列(LCS)
- 细说死锁
- 被12306坑了?聊聊验证码发展
- 谁说Java无指针, JAVA链表指针也好烦 - Java 指针回归
- WEB安全实战(三)XSS 攻击的防御
- 电路与Multisim基础 小特点:该元器件已废弃
- 大话三轴陀螺仪
- JavaSE 多态
- HDU 5876 Sparse Graph (补图BFS+(链表||set))