1251: 最长公共子串
时间限制: 1 Sec 内存限制: 128 MB
提交: 1277 解决: 816
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
在字符串中任意个连续的字符组成的子序列称为该串的子串。例如,串X="abc",则串"a","b","c","ab","bc","abc",都是X的子串。现给定两个字符串,求出他们最长的公共子串长度。
输入
第1行为字符序列S,都是大写字母组成,长度小于5000。
第2行为字符序列T,都是大写字母组成,长度小于5000。
输出
输出上述两个串的最长公共子串的长度。
样例输入 Copy
GWLMEKAAZD
VFZMEWLM
样例输出 Copy
3
提示
来源/分类
动态规划
import java.util.Scanner;
//1251
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String S = scanner.next();
String T = scanner.next();
int result = longestCommonSubstringLength(S, T);
System.out.println(result);
}
private static int longestCommonSubstringLength(String S, String T) {
int m = S.length();
int n = T.length();
int[][] dp = new int[m + 1][n + 1];
int max_length = 0;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (S.charAt(i - 1) == T.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
max_length = Math.max(max_length, dp[i][j]);
}
}
}
return max_length;
}
}