zoukankan      html  css  js  c++  java
  • LeetCode 712. Minimum ASCII Delete Sum for Two Strings

    712.Minimum ASCII Delete Sum for Two Strings(两个字符串的最小ASCII删除和)

    题目:

      

      给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和。

      示例 1:

      输入: s1 = "sea", s2 = "eat"
      输出: 231
      解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入总和。
      在 "eat" 中删除 "t" 并将 116 加入总和。
      结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。

      注意:

      • 0 < s1.length, s2.length <= 1000
      • 所有字符串中的字符ASCII值在[97, 122]之间。

    思路:

      与前段时间的最小编辑距离相似,这题一看就觉得应该用动态规划,缺什么就定义什么,这边需求最小和,那么就设定数组step[][],和sc1[],sc2[]。后两个是输入字符串转换而来,减少运算时间。step[i][j]数组是用于存放s1中前 i 个字母和s2中前 j 个字母的最小删除和 。

      首先进行初始化,原点的值为0,之后行列就是将前n为清空所需的最小删除和,之后进行二维计算。

      此时对于s1中的第 i+1 个字母,和s2中的第 j+1 个字母,进行判断:

      1.如果二者相同,则无需变化,直接 step[ i+1 ][ j+1 ] = step[ i ][ j ] ;

      2.二者不同,就要考虑是删除s1的新字母还是删除s2的新字母,当然,还有两种都删除,

        即为 step[ i+1 ][ j+1 ] = Min(num1,num2,num3);

      最后得到的step[ i ][ j ]就是最小删除和。

    图解:

      红色加大部分是e,相同,即为左上格子的值;黑色加大是不同的,三选一,找到最小值。

      

    代码:

     1     public static int minimumDeleteSum(String s1, String s2)  
     2     {
     3         int len1 = s1.length();
     4         int len2 = s2.length();
     5         char[] sc1 = s1.toCharArray();
     6         char[] sc2 = s2.toCharArray();
     7         int[][] step = new int[len1+1][len2+1];
     8      
     9         step[0][0] = 0;
    10         
    11         for (int i = 1; i <= len1; i++) 
    12             step[i][0] = step[i-1][0] + sc1[i-1];
    13         
    14         for (int j = 1; j <= len2; j++) 
    15             step[0][j] = step[0][j-1] + sc2[j-1];
    16 
    17         for (int i = 1; i <= len1; i++) 
    18         {
    19             for (int j = 1; j <= len2; j++) 
    20             {
    21                 if(sc1[i-1]==sc2[j-1])
    22                 {
    23                     step[i][j] = step[i-1][j-1];
    24                 }
    25                 else
    26                 {
    27                     step[i][j] = Math.min(Math.min(step[i-1][j] + sc1[i-1], step[i][j-1] + sc2[j-1]),
    28                             step[i-1][j-1] + sc1[i-1] + sc2[j-1]);
    29 
    30                 }
    31             }
    32         }
    33         
    34         return step[len1][len2];
    35     }
    View Code
  • 相关阅读:
    运行ConnectionDemo时遇到的问题及解决方案
    xampp启动MySQL出现Error: MySQL shutdown unexpectedly.
    20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结
    KMS
    MAC 添加共享,脚本执行
    zabbix企业应用之windows系统安装omsa硬件监控
    SCCM大致安装过程,参考前辈教程完成部署
    MAC加域重复跳出---"talagent"想使用“本地项目” 的钥匙串
    CentOS Linux解决 Device eth0 does not seem to be present
    zabbix3.0.4 部署History
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10880382.html
Copyright © 2011-2022 走看看