NC127 最长公共子串
描述
给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。
示例1
输入:
“1AB2345CD”,“12345EF”
复制
返回值:
“2345”
import java.util.*;
public class Solution {
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
public String LCS (String str1, String str2) {
// write code here
if(str1 == null || str2 == null || str1.length() == 0 || str2.length() == 0){
return null ;
}
int[][] dp = new int[str1.length()][str2.length()] ;
int end = 0 , maxlen = 0 ;
for(int i = 0 ; i < str1.length() ; i++){
for(int j = 0 ; j < str2.length() ; j++){
if(str1.charAt(i) == str2.charAt(j)){
if(i == 0 || j == 0){
dp[i][j] = 1 ;
}else{
dp[i][j] = dp[i-1][j-1] + 1 ;
}
if(maxlen < dp[i][j]){
maxlen = dp[i][j] ;
end = i ;
}
}
}
}
if(maxlen == 0){
return "-1" ;
}
return str1.substring(end - maxlen + 1 , end+1) ;
}
}