import java.util.Scanner; // medium 双指针: // 1. 先定义较短字符串a和较长字符串b。 // 2. 通过判断b是否包含a的子串,来查找最长公共子串 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String aa=in.next(); String bb=in.next(); String a=aa.length()<bb.length()?aa:bb; String b=aa.length()<bb.length()?bb:aa; int left=0; int right=1; String res="",sub=""; int max_len=0; int a_len=a.length(),b_len=b.length(); while(right<=a_len){ //右指针的最大值是a的最后一个元素 sub=a.substring(left,right); if(b.contains(sub)){ if(sub.length()>max_len){ //记录最大长度和子串; max_len=sub.length(); res=sub; } right++; //如果b包含子串,右指针继续右移,以寻求更长的子串。 }else{ left++; //如果b不包含,左指针左移,右指针左指针处开始(最小长度开始) right=left+1; } } System.out.println(res); } }