> - `dp[i][j]`表示i第一个字符串前`i`个和第二个字符串前`j`个字符最长的子序列长度. > - `dp[i][j]=[[0]*m for _ in range(n)]` 其中m=len(s1), n=len(s2). > - 如果`s1[i]==s2[j]`,则 `dp[i][j]=dp[i-1][j-1]+1`否则`dp[i][j]=max(dp[i][j-1],dp[i-1][j])` > - 需要注意的是,结果求的是子序列,而不是子序列的长度,因此需要另外维护一个`dir[m][n]`来记录每个状态是从何处转移过来的,可以用1,2,3来代替三个方...