最长公共子串
来源:互联网 发布:人脉关系网软件 编辑:程序博客网 时间:2024/06/16 11:17
1、最长公共子串与最长公共子序列的区别?
最长公共子序列在原序列中不要求连续,而最长公共子串要求在原序列中是连续的。
分析:求两个子串x(x[0],x[1],……,x[n-1]),y(y[0],y[1],……,y[m-1])的最长公共子串,令dp[i][j]表示以x[i-1],y[j-1]结尾的最长公共子串的长度。则可以得出转态转移方程:
import java.util.Scanner;//s1,s2最长公共子串public class LCS2{ static int dp[][];//dp[i][j]:以s1[i-1],s2[j-1]结尾的最长公共子串的长度 public static void main(String[] args) { Scanner in=new Scanner(System.in); while(in.hasNext()) { String s1=in.next(); String s2=in.next(); dp=new int[s1.length()+1][s2.length()+1]; String resut=lcs(s1, s2); System.out.println(resut); } } static public String lcs(String s1,String s2) { int n=s1.length(); int m=s2.length(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s1.charAt(i-1)==s2.charAt(j-1)) { dp[i][j]=dp[i-1][j-1]+1; }else { dp[i][j]=0; } } } int max=0; int end=-1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(max<dp[i][j]) { max=dp[i][j]; end=i; } } } if(max>0){ return s1.substring(end-max,end); } return ""; }}
1 0
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- DSP 和 MCU
- JSON数据在cocos中的解包和在php文件中的打包
- python 模拟post上传图片
- 有价值的C语言开源库
- c++中应用程序获得管理员权限运行(图标带盾牌)
- 最长公共子串
- 算法题:路灯
- android支付宝 KeyFactory PrivateKey
- Hashtable 和 HashMap的区别
- NSAttributedString的使用
- Mob集成微信登陆
- AMQ7017 日志不可用
- HDU-1114-Piggy-Bank【完全背包】
- HTTP协议详解