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

柳婼發表於2018-10-10

問題描述
給定兩個字串,尋找這兩個字串之間的最長公共子序列。
輸入格式
輸入兩行,分別包含一個字串,僅含有小寫字母。
輸出格式
最長公共子序列的長度。
樣例輸入
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]);
    }

}

 

相關文章