动态规划之最长公共子序列

 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 }

 

posted @ 2013-11-05 14:51  Sunlnx  阅读(198)  评论(0)    收藏  举报