[Java] 藍橋杯ADV-202 演算法提高 最長公共子序列
阿新 • • 發佈:2018-12-14
問題描述給定兩個字串,尋找這兩個字串之間的最長公共子序列。輸入格式輸入兩行,分別包含一個字串,僅含有小寫字母。輸出格式最長公共子序列的長度。樣例輸入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]); } }