当前位置: 首页 > news >正文

青岛君哲网站建设公司重庆seo技术博客

青岛君哲网站建设公司,重庆seo技术博客,天津建筑信息网,wordpress内容模型目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1653. 使字符串平衡的最少删除次数 - 力扣(LeetCode) 题目描述 给你一个字符串 s ,它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符,使得 …

目录

题目来源

题目描述

示例

提示

题目解析

算法源码


题目来源

1653. 使字符串平衡的最少删除次数 - 力扣(LeetCode)

题目描述

给你一个字符串 s ,它仅包含字符 'a' 和 'b'​​​​ 。

你可以删除 s 中任意数目的字符,使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j ,且 s[i] = 'b' 的同时 s[j]= 'a' ,此时认为 s 是 平衡 的。

请你返回使 s 平衡 的 最少 删除次数。

示例

输入:s = "aababbab"
输出:2
解释:你可以选择以下任意一种方案:
下标从 0 开始,删除第 2 和第 6 个字符("aababbab" -> "aaabbb"),
下标从 0 开始,删除第 3 和第 6 个字符("aababbab" -> "aabbbb")。

输入:s = "bbaaaaabb"
输出:2
解释:唯一的最优解是删除最前面两个字符。

提示

  • 1 <= s.length <= 105
  • s[i] 要么是 'a' 要么是 'b'​ 。

题目解析

本题最优思路是采用动态规划。

我们可以定义一个dp数组,dp[i]的含义是将输入字符串s的0~i区间变得平衡的最少修改次数,而dp[i+1]其实就是相当于在dp[i]的0~i区间尾部追加一个字符,此时我们只需要考虑追加字符的处理来保持0~i+1区间平衡即可。

如果追加的s[i] == ‘b’, 则不会破坏平衡。

如果追加的s[i] == 'a',则会破坏破坏,此时有两种删除策略:

  1. 由于0~i-1已经平衡了,因此我们可以删除s[i],已期不会破坏0~i-1已形成的平衡,即dp[i] = dp[i-1] + 1  (+1对应删除s[i]的动作)
  2. 如果我们不删除s[i]的话,则需要将 0~i-1 中所有的b删除,因此在遍历s的过程中,我们还需要记录 0 ~ i 范围内的b的数量,比如countB[i] 含义为 0~i范围内b的数量。此时 dp[i] = countB[i-1]

我们只需要取上面两个dp[i]中最小的即可,即dp[i] = min(dp[i-1] + 1, countB[i-1])

但是上面将dp,countB定义为数组非常浪费内存,这里起始最终只要求的是输入s字符串0~n-1区间变得平衡的最小次数,因此我们不需要缓存其他区间最小数次数据,而是可以对dp,countB数组进行压缩,每次用最新值覆盖前一个值即可。

算法源码

JS

/*** @param {string} s* @return {number}*/
var minimumDeletions = function(s) {let dp = 0 // dp记录的是将s的[0, i]区间变得平衡的最少次数let countB = 0 // countB 记录的是 s 的 [0, i]区间中b字符的个数for(let i = 0; i < s.length; i++) {if(s[i] == 'a') dp = Math.min(dp + 1, countB) // 末尾新增a会破坏平衡,此时需要进行删除动作else countB++ // 末尾新增b不会破坏平衡}return dp;
};

 

 

Java

class Solution {public int minimumDeletions(String s) {int dp = 0; // dp记录的是将s的[0, i]区间变得平衡的最少次数int countB = 0; // countB 记录的是 s 的 [0, i]区间中b字符的个数for(int i=0; i < s.length(); i++) {if(s.charAt(i) == 'a') dp = Math.min(dp + 1, countB); // 末尾新增a会破坏平衡,此时需要进行删除动作else countB++; // 末尾新增b不会破坏平衡}return dp;}
}

 

Python

class Solution(object):def minimumDeletions(self, s):dp = 0  # dp记录的是将s的[0, i]区间变得平衡的最少次数countB = 0  # countB 记录的是 s 的 [0, i]区间中b字符的个数for c in s:if c == 'a':dp = min(dp + 1, countB)  # 末尾新增a会破坏平衡,此时需要进行删除动作else:countB += 1  # 末尾新增b不会破坏平衡return dp

http://www.dinnco.com/news/30404.html

相关文章:

  • 哪个网站可以付费做淘宝推广百度空间登录入口
  • 备案网站负责人网站自助建站系统
  • 乐基儿做黎明网站的女郎今日新闻最新事件
  • 赤峰市哪里做网站网络推广主要是做什么工作
  • 深圳外贸建站与推广西安优化排名推广
  • 镇海官方网站建设网页设计作品集
  • 本地环说wordpress配置邮箱seo一个月赚多少钱
  • 宝安区哪一个街道最富裕seo云优化如何
  • wordpress 好 免费主题无锡网站优化
  • 做面包有关电影网站网站外链工具
  • 金坛常州做网站营销网址
  • 自己做网站开微店可行吗宁德市教育局官网
  • 黑龙江俄语网站制作小程序排名优化
  • logo设计网站国外外贸网站建设报价
  • 有专业做网站的学校吗网站推广技巧有哪些
  • 哈尔滨网站营销推广seo排名的方法
  • 乐清做网站的公司关键词推广优化排名如何
  • 深圳市地图外贸网站seo
  • 政府网站建设经验交流材料宁波seo优化服务
  • 汽贸做网站有用处吗seo管理软件
  • 应用商店免费下载seo全站优化全案例
  • 邮箱或企业邮箱智能网站排名优化
  • google网站上海网站制作推广
  • 做论坛网站的cms西安网站seo排名优化
  • 网站想换域名 如何操作北京关键词优化服务
  • 网站广告推广怎么做百度数据研究中心官网
  • 淘宝网站边上的导航栏怎么做市场营销策略
  • 怎样wordpress百度推广优化师培训
  • 购物网站建设成本今日热点新闻2022
  • 网站注册转化率网站首页布局设计模板