循环从1中取字符组成字符串,判断2中是否包含该子串,若包含则继续取,直到取到不包含的字符为止,与最大子串判断长度进行替换
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.equals(str2))return str1;
// 循环从1中取字符组成字符串,判断2中是否包含该子串,若包含则继续取,直到取到不包含的字符为止,与最大子串判断长度进行替换
String maxStr="";
for(int i=0;i<str1.length();i++){
String s = "";
// 剩余长度比最大子串长度还小,不用再比
if(maxStr.length()>str1.length()-i)break;
for(int j=i;j<str1.length();j++){
s += str1.charAt(j);
if(str2.contains(s)){
if(maxStr.length()<s.length()) maxStr=s;
}
if(!str2.contains(s)){
break;
}
}
}
return maxStr;
}
}
增加contains方法的代码
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.equals(str2))return str1;
// 循环从1中取字符组成字符串,判断2中是否包含该子串,若包含则继续取,直到取到不包含的字符为止,与最大子串判断长度进行替换
String maxStr="";
for(int i=0;i<str1.length();i++){
StringBuilder s = new StringBuilder("");
// 剩余长度比最大子串长度还小,不用再比
if(maxStr.length()>str1.length()-i)break;
for(int j=i;j<str1.length();j++){
s.append(str1.charAt(j));
boolean contain = contain(s.toString(),str2);
if(contain){
if(maxStr.length()<s.length()) maxStr=s.toString();
}else{
break;
}
// if(str2.contains(s.toString())){
// if(maxStr.length()<s.length()) maxStr=s.toString();
// }
// if(!str2.contains(s)){
// break;
// }
}
}
return maxStr;
}
public boolean contain(String s,String str){
boolean contain = false;
if(s.length()>str.length())return contain;
for(int i=0;i<str.length();i++){
if(str.length()-i<s.length())break;
int j=0,x=i;
while(j<s.length() && x<str.length()){
if(str.charAt(x)==s.charAt(j)){
x++;j++;
if(j==s.length())contain=true;
}else{
break;
}
}
}
return contain;
}
}