原题
c++ dp
class Solution {
public:
int longestCommonSubsequence(string s1, string s2) {
vector<vector<int> > dp(s1.size() + 1, vector<int>(s2.size() + 1, 0));
for(int i=1;i<=s1.size();i++){
for(int j=1;j<=s2.size();j++){
if(s1[i-1]==s2[j-1]) dp[i][j]=1+dp[i-1][j-1];
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[s1.size()][s2.size()];
}
};
python dp
class Solution:
def longestCommonSubsequence(self, s1: str, s2: str) -> int:
dp = [[0 for i in range(len(s1)+1)] for j in range(len(s2)+1)]
for i in range(1,len(s2)+1):
for j in range(1,len(s1)+1):
if s2[i-1] == s1[j-1]:
dp[i][j] = dp[i-1][j-1]+1
else:
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
return dp[-1][-1]
参考教程:
最长公共子序列
最长公共子串(要求连续,与本题要求不同)