题目
最长公共子串类似最长公共子序列,但是要搞清一个问题就是公共子串要求字符必须连续。例如:字符串13455与145576的最长公共子序列为1455而最长公共子串为455
解析
- 使用二维数组c[m][n]
- c[i][j]记录序列X和Y的最长公共子串的长度
实现
public String LongCommonSubstring(String A, String B){
int[][] dp = new int[A.length()+1][B.length()+1];
int maxLength = A.length() > B.length() ? A.length() : B.length();
int[] max = new int[maxLength];//记录最长子串长度的数组
int[] maxIndex = new int[maxLength];//记录最长子串索引数组
for (int i = 0; i <= A.length(); i++) {
dp[i][0] = 0;
}
for (int i = 1; i <= B.length(); i++) {
dp[0][i] = 0;
}
//确定子串的长度及下标
for (int i = 1; i <= A.length(); i++) {
for (int j = 1; j <= B.length(); j++) {
if (A.charAt(i-<