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

转载于:https://www.cnblogs.com/blogxjc/p/10880382.html

LeetCode 712. Minimum ASCII Delete Sum for Two Strings相关推荐

  1. leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...

  2. leetcode 209. Minimum Size Subarray Sum | 209. 长度最小的子数组(Java)

    题目 https://leetcode.com/problems/minimum-size-subarray-sum/ 题解 双指针解法,左指针和右指针在合适的时候向右走,并维护一个sum 版本1 思 ...

  3. leetcode 931. Minimum Falling Path Sum(最小的下降路径和)

    下降的路径就是从第一行任一个元素出发,只能直着或斜着走到下一行,直到到达最后一行,返回形成的路径中最小的路径和. 思路: DP 从下往上推, 在最后一行选一个元素,那么它是从哪里过来的?是从上一行的j ...

  4. 【DP】LeetCode 64. Minimum Path Sum

    LeetCode 64. Minimum Path Sum Solution1:标准的动态规划题目 class Solution { public:int minPathSum(vector<v ...

  5. LeetCode 712. 两个字符串的最小ASCII删除和

    LeetCode 712. 两个字符串的最小ASCII删除和 文章目录 LeetCode 712. 两个字符串的最小ASCII删除和 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂 ...

  6. [LintCode] Minimum Size Subarray Sum 最小子数组和的大小

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  7. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  8. 【打印代码+好好理解+子串问题】LeetCode 76. Minimum Window Substring

    LeetCode 76. Minimum Window Substring 字符串子串问题!!!理解这题真是花了很大的功夫!!! 参考链接:https://blog.csdn.net/weixin_4 ...

  9. LeetCode—494. 目标和(Target Sum)——分析及代码(Java)

    LeetCode-494. 目标和[Target Sum]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代码 (3)结果 2. 动态规划+节省空间 (1)思路 ...

最新文章

  1. 区块链学习之-发布合约
  2. shell mysql e_xshell怎么搭建mysql
  3. 智能电视:跳出那个坑
  4. Flex的Array和ArrayCollection
  5. lost connection to MySQL server at waiting for initial communication packet,system error:o
  6. oracle consistent gets,oracle构建一致性读
  7. 主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa
  8. 【HDU - 1026 】Ignatius and the Princess I (bfs + 记录路径)
  9. 【HDU - 2102】A计划 (麻烦一点的bfs)
  10. 在Windows 2000下优化Oracle9i性能
  11. SSH整合之四(页面逻辑的实现)
  12. php 同步文件到服务器上,PHPstorm配置同步服务器文件
  13. android usb挂载分析---vold处理内核消息
  14. 【webservice】Axis2 客户端调用 设置超时时间
  15. 新GRE词汇按部就班的学习方法
  16. 西门子plc软件 linux,西门子PLC软件安装总结工程师们都在收藏
  17. 邓俊辉 数据结构与算法C++版 第十三章 串 ADT
  18. 【多线程】送你1万朵玫瑰花
  19. LeetCode 链表 队列 栈的问题
  20. android gps底层,Android 强制开启GPS

热门文章

  1. java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端
  2. 贪心法—— LeetCode45 跳跃游戏II(跳跃游戏进阶版)
  3. 循环冗余检错码CRC
  4. 2017上海ACM ECL-final 总结
  5. bzoj 2724: [Violet 6]蒲公英(分块预处理)
  6. bzoj 2131: 免费的馅饼(树状数组+DP)
  7. 大学生程序设计邀请赛(华东师范大学)C:袋鼠妈妈找孩子
  8. opencv cv.waitKey(60) 0xff 含义和作用
  9. Perceptual Losses for Real-Time Style Transfer and Super-Resolution 运行程序
  10. AD19调用器件封装时报错Access violation at address 0000000141A9EDD4 in module 'IntegratedLibrary.DLL'.