package main
import "fmt"
func solution(str1, str2 string) int {
dp := make([][]int, len(str1)+1)
for i := range dp {
dp[i] = make([]int, len(str2)+1)
}
for i, ch1 := range str1 {
for j, ch2 := range str2 {
if ch1 == ch2 {
dp[i+1][j+1] = dp[i][j] + 1
} else {
dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])
}
}
}
return dp[len(str1)][len(str2)]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
/*
*
输入:
abcde
ace
输出:3
解释:最长公共子序列是 "ace" ,它的长度为 3 。
*/
func main() {
var str1len int
var str2len int
fmt.Scanln(&str1len)
fmt.Scanln(&str2len)
var str1 string
var str2 string
fmt.Scanln(&str1)
fmt.Scanln(&str2)
fmt.Println(solution(str1, str2))
}