咱們有兩個字符串m和n,若是它們的子串a和b內容相同,則稱a和b是m和n的公共子序列。子串中的字符不必定在原字符串中連續。
例如字符串「abcfbc」和「abfcab」,其中「abc」同時出如今兩個字符串中,所以「abc」是它們的公共子序列。此外,「ab」、「af」等都是它們的字串。
如今給你兩個任意字符串(不包含空格),請幫忙計算它們的最長公共子序列的長度。java
abcfbc abfcab
programming contest
abcd mnp
4
2
0
package com.tonyluis.oj; import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { String str1 = in.next(); String str2 = in.next(); System.out.println(getLongestCommonSequence(str1, str2)); } } private static int getLongestCommonSequence(String A, String B) { int res = Integer.MIN_VALUE; int[][] dp = new int[A.length() + 1][B.length() + 1]; for (int i = 1; i <= A.length(); i++) for (int j = 1; j <= B.length(); j++) if (A.charAt(i - 1) == B.charAt(j - 1)) { dp[i][j] = dp[i - 1][j - 1] + 1; res = Math.max(res, dp[i][j]); } else dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); return res; } }