1. 程式人生 > >[Java] 藍橋杯ADV-202 演算法提高 最長公共子序列

[Java] 藍橋杯ADV-202 演算法提高 最長公共子序列

問題描述給定兩個字串,尋找這兩個字串之間的最長公共子序列。輸入格式輸入兩行,分別包含一個字串,僅含有小寫字母。輸出格式最長公共子序列的長度。樣例輸入abcdgh aedfhb樣例輸出3樣例說明最長公共子序列為a,d,h。資料規模和約定字串長度1~1000。

package adv202;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] a = ("," + in.nextLine()).toCharArray();
        char[] b = ("." + in.nextLine()).toCharArray();
        in.close();

        int[][] dp = new int[a.length][b.length];
        for (int i = 1; i < a.length; i++) {
            for (int j = 1; j < b.length; j++) {
                if (a[i] == b[j]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Integer.max(dp[i][j - 1], dp[i - 1][j]);
                }
            }
        }
        
        System.out.println(dp[a.length - 1][b.length - 1]);
    }

}