@(labuladong的算法小抄)[dp]
leetcode 712. 两个字符串的最小ASCII删除和
题目描述
解题思路
class Solution {
public int minimumDeleteSum(String s1, String s2) {
int m = s1.length(), n = s2.length();
/* 定义:dp[i][j]表示使得 s1[0...i-1] 和 s2[0...j-1]相同所需删除的最小ASCII码总和 */
int[][] dp = new int[m + 1][n + 1];
/* base case:dp[i][0] = s1[0...i-1]ASCII码总和 dp[0][j] = s2[0...j-1]ASCII码总和 */
for (int i = 1; i <= m; i++)
dp[i][0] += dp[i - 1][0] + s1.charAt(i - 1);
for (int j = 1; j <= n; j++)
dp[0][j] += dp[0][j - 1] + s2.charAt(j - 1);
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
} else {
dp[i][j] = Math.min(
dp[i - 1][j] + s1.charAt(i - 1), //删除s1
dp[i][j - 1] + s2.charAt(j - 1) //删除s2
);
}
}
}
return dp[m][n];
}
}