最長公共子序列

咱們有兩個字符串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;
	}
}
相關文章
相關標籤/搜索