1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| func longestCommonSubsequence(text1 string, text2 string) int { dp := make([][]int, len(text1)+1) for i := range dp { dp[i] = make([]int, len(text2)+1) }
dp[1][1] = same(text1[0], text2[0]) for i := 1; i < len(dp); i++ { for j := 1; j < len(dp[0]); j++ { dp[i][j] = max3(dp[i-1][j-1]+same(text1[i-1], text2[j-1]), dp[i-1][j], dp[i][j-1]) } } return dp[len(dp)-1][len(dp[0])-1] }
func same(a, b uint8) int { if a == b { return 1 } return 0 }
func max3(a, b, c int) int { return max(max(a, b), c) }
func max(a, b int) int { if a > b { return a } return b }
|