package main

/**
 * longest common substring
 * @param str1 string字符串 the string
 * @param str2 string字符串 the string
 * @return string字符串
*/
func LCS( str1 string ,  str2 string ) string {
  	// 和公共子序列差不多的思想,区别在于当两个字不相同时,这里需要把公共字串置空
    // dp[n][m]=dp[n-1][m-1]+str1[n]
    // dp[n][m]=""
    if len(str1)==0||len(str2)==0{return ""}
    result:=""
    dp:=make([][]string,len(str1)+1)
    for i:=0;i<len(dp);i++{
        dp[i]=make([]string,len(str2)+1)
    }
    for i:=1;i<=len(str1);i++{
        for j:=1;j<=len(str2);j++{
            if str1[i-1]==str2[j-1]{
                dp[i][j]=dp[i-1][j-1]+string(str1[i-1])
                if len(dp[i][j])>len(result){
                    result=dp[i][j]
                }
            }else{
                dp[i][j]=""
            }
        }
    }
    return result
}