最長公共子串 二維陣列 Go實現
參考:https://blog.csdn.net/dongyanwen6036/article/details/87914940
//CommonSubstr 尋找兩個字串間的最大相同子串
func CommonSubstr(A string, B string) string {
//構造BxA的二維陣列C,每個元素C[i][j]包含兩個資訊:1、該元素對應的B[i]與A[j]兩個字元是否相同
//2、 如果B[i]與A[j]相同,且各倒退一個字元B[i-1]A[j-1]也相同,則與前面字元構成一個公共子串,
//在C[i][j]元素額外儲存當前公共子串的長度1+C[i-1][j-1]的子串長度;如果B[i-1]A[j-1]不同
//則C[i][j]元素的公共子串的長度就只有當前公共字元一個
var irecord, nMax int
nMax = 0
var Common [][][]int
Common = make([][][]int, len(B), len(B))
for i := 0; i < len(B); i++ {
Common[i] = make([][]int, len(A), len(A))
for j := 0; j < len(A); j++ {
//Go初始化使用型別的零值,不用手動初始化
Common[i][j] = make([]int, 2, 2)
Common[i][j] = []int{0, 0}
if B[i] == A[j] {
Common[i][j][0] = 1
if i > 0 && j > 0 {
Common[i][j][1] = 1 + Common[i-1][j-1][1]
} else {
Common[i][j][1] = 1
}
if Common[i][j][1] > nMax {
nMax = Common[i][j][1]
irecord = i
}
} else {
Common[i][j][0] = 0
Common[i][j][1] = 0
}
}
}
if nMax == 0 {
return ""
} else {
return B[irecord-nMax+1 : irecord+1]
}
//
}
相關文章
- lCS(最長公共子串)
- 線性dp:最長公共子串
- java 實現 最長公共子序列Java
- 最長子串
- 牛客網 Coincidence(最長公共子串LCS板題)IDE
- 978 最長湍流子陣列陣列
- 最長上升子串
- 最長公共子序列
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 牛客題霸 [最長公共子串]C++題解/答案C++
- 最長公共子序列(JAVA)Java
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- 實現二維陣列的行列互換陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- java 最長迴文子串Java
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 二維陣列笛卡爾積js實現陣列JS
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- 二維陣列陣列
- 5. 最長迴文子串
- C語言 二維陣列實現三子棋的思路及程式碼C語言陣列
- 最長公共子序列求方案數
- 最長公共子序列 Longest Common Subsequence
- 線性dp:最長公共子序列
- LeetCode 1143.最長公共子序列LeetCode
- PHP中二維陣列與多維陣列PHP陣列
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- LeetCode 5.最長迴文子串LeetCode
- 無重複字元的最長子串字元
- 最長迴文子串 -- 三種解答
- 二維陣列排序陣列排序
- Java二維陣列Java陣列
- vector 二維陣列陣列
- 演算法練習:求字串的最長重複子串(Java實現)演算法字串Java
- 動態規劃-最長公共子序列動態規劃