题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
/**
1.dp[i][j] s1 中以i结尾 s2以j结尾的 最长公共子串长度
2.递推公式
如果 s1[i] == s2[j]
那么 dp[i][j]=dp[i-1][j-1]+1;
如果不等那么直接为0
3.遍历顺序
左上到右下
4.初始化
设置数组多一行一列
5.举例推导
*/
while (in.hasNext()) { // 注意 while 处理多个 case
String s1=in.next();
String s2=in.next();
//使s1是短的那个
if(s1.length()>s2.length()){
String temp=s1;
s1=s2;
s2=temp;
}
int max=0;
int idx=0;
int[][] dp=new int[s1.length()+1][s2.length()+1];
for(int i=0;i<s1.length();i++){
for(int j=0;j<s2.length();j++){
if(s1.charAt(i)==s2.charAt(j)){
dp[i+1][j+1]=dp[i][j]+1;
if(dp[i+1][j+1]>max){
max=dp[i+1][j+1];
idx=i;
}
}
}
}
System.out.println(s1.substring(idx-max+1,idx+1));
}
}
}

