题目描述:两个字符串的最小 ASCII 删除和(力扣712)
- dp含义:dp[i][j] 表示字符串 s1[i:] 和 s2[j:](s1[i:] 表示字符串 s1 从第 ii 位到末尾的子串,s2[j:] 表示字符串 s2 从第 jj 位到末尾的子串,字符串下标从 0 开始)达到相等所需删除的字符的 ASCII 值的最小和
- 当s1或s2是空串时,dp[i][j] 的值即为另一个非空字符串的所有字符的 ASCII 值之和
- 代码
public int minimumDeleteSum(String s1, String s2) {
int m = s1.length();
int n = s2.length();
int[][] dp = new int[m + 1][n + 1];
dp[0][0] = 0;
int sum = 0;
for (int i = 1; i < m + 1; i++) {
sum += s1.charAt(i - 1);
dp[i][0] = sum;
}
sum = 0;
for (int i = 1; i < n + 1; i++) {
sum += s2.charAt(i - 1);
dp[0][i] = sum;
}
for (int i = 1; i < m + 1; i++) {
for (int j = 1; j < n + 1; 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), dp[i][j - 1] + s2.charAt(j - 1));
}
}
return dp[m][n];
}