1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func LCS(a, b string) []rune { 8 var L [][]int 9 row := len(a) + 1 10 col := len(b) + 1 11 L = make([][]int, row) 12 var i, j int 13 for i = 0; i < row; i++ { 14 L[i] = make([]int, col) 15 } 16 //初始化第一行为0 17 for i = 0; i < row; i++ { 18 L[i][0] = 0 19 } 20 //初始化第一列为0 21 for j = 0; j < col; j++ { 22 L[0][j] = 0 23 } 24 var m, n int 25 res := make([]rune, 0) 26 for i = 0; i < row-1; i++ { 27 m = i + 1 28 for j = 0; j < col-1; j++ { 29 n = j + 1 30 if a[i] == b[j] { 31 L[m][n] = L[m-1][n-1] + 1 32 res = append(res, rune(a[i])) 33 } else if L[m-1][n] > L[m][n-1] { 34 L[m][n] = L[m-1][n] 35 } else { 36 L[m][n] = L[m][n-1] 37 } 38 } 39 } 40 return res 41 } 42 43 func main() { 44 res := LCS("xyxxzxyzxy", "zxzyyzxxyxxz") 45 fmt.Println(res) 46 }