解法一:动态规划

参考官方题解:https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/solution/liang-ge-zi-fu-chuan-de-zui-xiao-asciishan-chu-he-/
想不到啊😟

  1. class Solution {
  2. public int minimumDeleteSum(String s1, String s2) {
  3. final int len1 = s1.length();
  4. final int len2 = s2.length();
  5. // dp[i][j]表示s1[i:]和s2[j:]相等时的最小字符和
  6. int[][] dp = new int[len1 + 1][len2 + 1];
  7. dp[len1][len2] = 0;
  8. for (int i = len1 - 1; i >= 0; --i) {
  9. dp[i][len2] = dp[i + 1][len2] + s1.charAt(i);
  10. }
  11. for (int i = len2 - 1; i >= 0; --i) {
  12. dp[len1][i] = dp[len1][i + 1] + s2.charAt(i);
  13. }
  14. for (int i = len1 - 1; i >= 0; --i) {
  15. for (int j = len2 - 1; j >= 0; --j) {
  16. if (s1.charAt(i) == s2.charAt(j)) {
  17. dp[i][j] = dp[i + 1][j + 1];
  18. } else {
  19. dp[i][j] = Math.min(dp[i][j + 1] + s2.charAt(j), dp[i + 1][j] + s1.charAt(i));
  20. }
  21. }
  22. }
  23. return dp[0][0];
  24. }
  25. }