import java.util.*;
import static java.lang.Math.max;
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) {
// write code here
int x = str1.length();
int y = str2.length();
if (x == 0 || y == 0) {
//return "";
return "";
}
int[][] arr = new int[x + 1][y + 1];
int[][] arrnew = new int[x + 1][y + 1];
for (int i = 0; i <= x; i++) {
for (int j = 0; j <= y; j++) {
arr[i][j] = 0;
arrnew[i][j] = 0;
}
}
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
arr[i][j] = 1;
} else {
arr[i][j] = 0;
}
}
}
//由arr-》arrnew
//判断当前字符节点相等并且上一个节点也需要相等,才能➕1,否则只能为1
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
if (arr[i][j] == 1 && arr[i - 1][j - 1] == 1) {
arrnew[i][j] = max(max(arrnew[i - 1][j - 1] + 1, arrnew[i - 1][j]),
arrnew[i][j - 1]);
}
if (arr[i][j] == 1 && arr[i - 1][j - 1] == 0) {
arrnew[i][j] = max(max( 1, arrnew[i - 1][j]), arrnew[i][j - 1]);
}
}
}
int max1 = 0;
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
max1 = max(max1, arrnew[i][j]);
}
}
int res = -1;
String muban1 = "";
for(int i=0;i<=x-max1;i++) {
muban1 = str1.substring(i, i + max1);
for (int j = 0; j <= y - max1; j++) {
String muban2 = str2.substring(j, j + max1);
if (muban1.equals(muban2)) {
//return muban1;
res=1;
break;
}
}
if(res == 1){
break;
}
}
return muban1;
}
}