题解 | #最长公共子串#
最长公共子串
http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac
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) { int start = 0; int end = 1; //初始条件:subString(0, 1),左闭右开,即只取第一个第0个字符 String result = ""; while(end <= str2.length()){ //subString左闭右开,所以可以取到等于 String subStr = str2.substring(start, end); if(str1.contains(subStr)){ result = subStr; // str1包含str2的该子串,例如:ab,继续右移看是否继续包含abc,所以end右移 }else{ start++; //str1不包含str2的该子串,例如:13,不必再找以13开头的子串了,因为不包含13,肯定也不包含134,所以start右移;因为需要找最长子串,start右移后,end也需要右移,保证长度不会缩短 } end++; //上述两种情况,均需要end右移 } return result; } }