import java.util.*;


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) {
        char[] arr1 = str1.toCharArray() ;
        char[] arr2 = str2.toCharArray() ;
        int len1 = arr1.length ;
        int len2 = arr2.length ;
        //f[i][j]表示以arr1[i] arr2[j]结尾的最长公共子串的长度
        int f[][] = new int[len1][len2] ;
        int maxLen = 0 ;
        int t_i = 0 ;//记录最长的公共子串的最后一个字符在arr1中的位置
        int t_j = 0 ;//记录最长的公共子串的最后一个字符在arr1中的位置
        for(int i = 0 ; i < len1 ; i ++) {
            for(int j = 0 ; j < len2 ; j ++) {
                if(i == 0 || j == 0) {
                    f[i][j] = arr1[i] == arr2[j] ? 1 : 0 ;
                } else {
                    if(arr1[i] == arr2[j]) {
                        f[i][j] = 1 ;
                        if(arr1[i-1] == arr2[j-1]) {
                            f[i][j] = Math.max(f[i][j] , f[i-1][j-1] + 1) ;
                        }
                    }
                }
                if(f[i][j] > maxLen) {
                    maxLen = f[i][j] ;
                    t_i = i ;
                    t_j = j ;
                }
            }
        }
        int start = t_i - maxLen + 1 ;
        int end = t_i + 1 ;
        return str1.substring(start , end) ;
    }
}