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; } }