我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。
例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。
现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。
输入例子:
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; } }