|
@@ -10,23 +10,22 @@ using std::string;
|
|
|
using std::min;
|
|
|
|
|
|
#define L 1000
|
|
|
-#define INF 1e8
|
|
|
|
|
|
int dp[L + 1][L + 1];
|
|
|
|
|
|
class Solution {
|
|
|
public:
|
|
|
int minimumDeleteSum(string s1, string s2) {
|
|
|
- memset(dp, 0, sizeof(dp));
|
|
|
+ dp[0][0] = 0;
|
|
|
for (int i = 1; i <= s1.size(); i++) { // The boundary is very important!
|
|
|
- dp[i][0] = dp[i - 1][0] + s1.at(i - 1);
|
|
|
+ dp[i][0] = dp[i - 1][0] + s1[i - 1];
|
|
|
}
|
|
|
for (int j = 1; j <= s2.size(); j++) {
|
|
|
- dp[0][j] = dp[0][j - 1] + s2.at(j - 1);
|
|
|
+ dp[0][j] = dp[0][j - 1] + s2[j - 1];
|
|
|
}
|
|
|
for (int i = 1; i <= s1.size(); i++) {
|
|
|
for (int j = 1; j <= s2.size(); j++) {
|
|
|
- int c1 = s1.at(i - 1), c2 = s2.at(j - 1);
|
|
|
+ int c1 = s1[i - 1], c2 = s2[j - 1];
|
|
|
int cost = min(dp[i - 1][j] + c1, dp[i][j - 1] + c2);
|
|
|
if (c1 == c2) {
|
|
|
dp[i][j] = min(dp[i - 1][j - 1], cost);
|