题解 | #最长公共子串#
最长公共子串
https://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * longest common substring * @param str1 string字符串 the string * @param str2 string字符串 the string * @return string字符串 */ func LCS(str1 string, str2 string) string { m, n := len(str1), len(str2) if m == 0 || n == 0 { return "" } // 初始化dp数组 dp := make([][]int, m+1) for i := range dp { dp[i] = make([]int, n+1) } maxLength := 0 endIndex := 0 // 动态规划填表 for i := 1; i <= m; i++ { for j := 1; j <= n; j++ { if str1[i-1] == str2[j-1] { dp[i][j] = dp[i-1][j-1] + 1 if dp[i][j] > maxLength { maxLength = dp[i][j] endIndex = i - 1 } } else { dp[i][j] = 0 } } } // 返回最长公共子串 if maxLength > 0 { return str1[endIndex-maxLength+1 : endIndex+1] } return "" }