中文字符串不能简单的采用网上流行的LCS算法,需要根据unicode编码先转换为go里的rune类型,实现int32类型数组的LCS,且这里用fo实现DP算法里的二维数组
代码
func LCSLength(x []rune, y []rune) int {
var m, n int
m = len(x)
n = len(y)
lookup := make([][]int, m+1)
for i := range lookup {
lookup[i] = make([]int, n+1)
}
var i, j int
for i = 0; i <= m; i++ {
lookup[i][0] = 0
}
for j = 0; j <= n; j++ {
lookup[0][j] = 0
}
var res int
for i = 1; i <= m; i++ {
for j = 1; j <= n; j++ {
if x[i-1] == y[j-1] {
lookup[i][j] = max(lookup[i-1][j-1]+1, lookup[i][j])
res = max(res, lookup[i][j])
}
}
}
return res
}
func max(x int, y int) int {
if x > y {
return x
}
return y
}