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 }