您的位置:首页 > 其它

最长连续公共子序列---动态规划

2017-09-01 17:54 357 查看
对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,

不要求字符连续

给定字符串A和B,请返回最长公共子序列的长度。保证两串长度均小于等于300。

测试样例:

1A2C3D4B56

B1D23CA45B6A

返回:6

public class 最长公共子序列 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String A=sc.next();
String B=sc.next();
sc.close();
int n=A.length();
int m=B.length();
char a[]=A.toCharArray();
char b[]=B.toCharArray();
int[][] dp=new int[n + 1][m + 1];
//为字符串A的第一个字符到第 i 个字符串和字符串B的第一个字符串到第 j 个字符串的最长公共子序列
for (int i=1;i<=n;i++) {
for (int j=1;j<= m;j++){
if (a[i-1]==b[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
System.out.println(dp
[m]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: