题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
求最短字符串里面出现的最长的子串 采用字符滚动的方式,很好理解。 定义左右两个指针,分别指向索引位置。 根据指针所在位置截取字符串,判断是否在另一个字符串中: 存在,则滚动右指针+1,重复上面的判断,直到字符串结束 不存在,左右指针同时滚动+1,重复上面的判断,直到字符串结束 (匹配的字符需要保留与下一个做比较,最终保留最先出现且最长的)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s1 = sc.next();
String s2 = sc.next();
String small, big;
if (s1.length() > s2.length()) {
small = s2;
big = s1;
} else {
small = s1;
big = s2;
}
String longest = "";
String sub = null;
int left = 0;
int right = 1;
while (left < right && right <= small.length()) {
sub = small.substring(left,right);
if (big.contains(sub) && sub.length() > longest.length()) {
longest = sub;
} else {
left++;
}
right++;
}
System.out.println(longest);
}
}
}