
C++ code:
//我们建立一个二维数组dp,其中dp[i][j]表示字符串s1的前i个字符和字符串s2的前j个字符变相等所要删除的字符的最小ASCII码累加值。
//dp还是多一圈,如果不一样取当前上+s1/左+s2 最小值
int minimumDeleteSum(string s1, string s2) {
int m=s1.size();
int n=s2.size();
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
for(int i=1;i<=m;i++){
dp[i][0]=dp[i-1][0]+s1[i-1];
}
for(int i=1;i<=n;i++)
dp[0][i]=s2[i-1]+dp[0][i-1];
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
dp[i][j]=(s1[i-1]==s2[j-1])? dp[i-1][j-1]:min(dp[i][j-1]+s2[j-1], dp[i-1][j]+s1[i-1] );
}
}
return dp[m][n];
}
网友评论