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

来源:互联网 发布:mysql事务锁 编辑:程序博客网 时间:2024/05/21 16:12

对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,
不要求字符连续
给定字符串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[n][m]);    }}
阅读全文
0 0