题目描述:给定两个字符串str1和str2,输出两个字符串的最长公共子串,题目保证str1和str2的最长公共子串存在且唯一。
示例:输入 "1AB2345CD","12345EF" 返回值 "2345"
思路:滑动窗口
start为滑动窗口的左边界,end为滑动窗口的右边界。start和end初始值为0和1。新建字符串str为str2的start下标到end下标的字符串,确保end不大于str2的长度的情况下:res为最后要求的最长公共子串
情况1:当str在str1中并且str的长度大于等于res的长度时,此时str为最大公共子串,将str赋值给res,并将end++;
情况2:当str在str1中并且str的长度小于res的长度时,只将end++;
情况3:当str不在str1中,则滑块大小仍然为1的情况下将滑块右移,即start++,end++;
循环条件内,确保end不大于str2的长度,可以得到最长公共子串res
import java.util.*;
public class Solution {
public String LCS (String str1, String str2) {
String res = "";
int start = 0;
int end = 1;
while(end<=str2.length()){
String str = str2.substring(start,end);
if(str1.contains(str)&&str.length()>=res.length()){
res = str;
end++;
}else if(str1.contains(str)&&str.length()<res.length()){
end++;
}else{
start++;
end++;
}
}
return res;
}
}