【LeetCode】1653. 使字符串平衡的最少删除次数

news2024/9/22 23:36:51

1653. 使字符串平衡的最少删除次数

题目描述

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

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

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


示例 1

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


示例 2

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


提示

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

算法一:前后缀分解,两次遍历

思路

在这里插入图片描述

  • 第一次遍历:首先统计 s 中 a 的出现个数,也就是枚举分割线的第一种情况;
  • 第二次遍历:依次访问 s 中的每个字符,每遍历依次字符就是枚举一种分割线情况。如果是 ‘a’ ,那么删除次数 -1 ,如果遇到 ‘b’ ,就 +1。

收获

  • if-else 写成 del += (c - 'a') * 2 - 1;效率会提升很多。

    CPU 在遇到分支(条件跳转指令)时会预测代码要执行哪个分支,如果预测正确,CPU 就会继续按照预测的路径执行程序。但如果预测失败,CPU 就需要回滚之前的指令并加载正确的指令,以确保程序执行的正确性。

    对于本题的数据,字符‘a’ 和 ‘b’ 可以认为是随机出现的,在这种情况下分支预测就会有 50% 的概率失败。失败导致的回滚和加载操作需要消耗额外的 CPU 周期,如果能用较小的代价去掉分支,对于本题的情况必然可以带来效率上的提升

    注意:这种优化方法往往会降低可读性,最好不要在业务代码中使用

算法情况

  • 时间复杂度:O(n), 其中 n 为 s 的长度;

  • 空间复杂度:O(1)。

    在这里插入图片描述

代码

class Solution {
public:
    int minimumDeletions(string s) {
        int del = 0; // 要删除的字符数
        for(char c : s){ 
            // del 统计字符 a 的个数 
            del += ('b' - c);
        }
        int ans = del;
        for(char c : s){
            // a:-1 b:+1
            del += (c - 'a') * 2 - 1;
            ans = min(ans, del);
        }
        
        return ans;
    }
};

算法二:动态规划,一次遍历

思路

在这里插入图片描述
在这里插入图片描述

收获

  • 太久没用线性规划解题了,复习一下。
  • 另外,方法二虽然只进行了一次遍历,但是时间复杂度并不低,因为这里用到了 if - else 的判断语句,原因在方法一介绍了。

算法情况

  • 时间复杂度:O(n), 其中 n 为 s 的长度;
  • 空间复杂度:O(1)。

代码

class Solution {
public:
    int minimumDeletions(string s) {
        int n = s.size(); 
        int cnt_b = 0;
        int ans = 0;
        for(int i=1; i<=s.size(); ++i){
            if(s[i-1] == 'b'){
                cnt_b ++;
            }
            else{
                ans = min(cnt_b, ans + 1);
            }
        }
        
        return ans;
    }
};

参考题解

  1. 方法一
  2. 方法二:动态压缩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次输入多个数据-batchsize大于1的简单的线性回归模型-标量

最简单的线性回归模型-标量 接上篇&#xff0c;由于batchsize为1&#xff0c;因此loss有很大的波动&#xff0c;这篇我们讨论batchsize大于1的情况。若batchsize数量为N&#xff0c;则ywxbywxbywxb的损失函数为&#xff1a; L∑i1N(wxi∗b−yi∗)2(wxTbeT−yT)(wxbe−y)\begin{…

html网页源码加密

html加密、网页加密、网页源码加密html网页源码能加密吗&#xff1f;能加密到何种程度&#xff1f; 某些时候&#xff0c;我们可能需要对html网页源码加密&#xff0c;使网页源码不那么容易被他人获得。出于这个目标&#xff0c;本文测试一种html加密方式。 提前透露&#xf…

Linux系统PWM应用编程

目录应用层如何操控PWM编写应用程序在开发板上测试本章我们将学习如何对开发板上的PWM 设备进行应用编程。 应用层如何操控PWM 与LED 设备一样&#xff0c;PWM 同样也是通过sysfs 方式进行操控&#xff0c;进入到/sys/class/pwm 目录下&#xff0c;如下所示&#xff1a; 这里…

Java多态性

用一句话概括就是&#xff1a;事物在运行过程中存在不同的状态。 多态的存在有三个前提: 1.要有继承关系 2.子类要重写父类的方法 3.父类引用指向子类对 但是其中又有很多细节需要注意。首先我们定义两个类&#xff0c;一个父类Animal&#xff0c;一个子类Cat。 父类Animal cl…

Hive学习——企业级调优

目录 一、计算资源调优 (一)Yarn资源配置——集群 1.Yarn配置说明 (1)yarn.nodemanager.resource.memory-mb (2)yarn.nodemanager.resource.cpu-vcores (3)yarn.scheduler.maximum-allocation-mb (4)yarn.scheduler.minimum-allocation-mb (二)MapReduce资源配置 二、…

裁员降本,扭转颓势!通用汽车吹响智能电动「中国集结号」

2023年&#xff0c;将是合资品牌能否搭上中国智能电动市场红利的关键一年。 全新一代VCS智能座舱&#xff08;高通8155&#xff0c;30英寸6K曲面OLED显示屏&#xff0c;12.6英寸WHUD以及5G版本的别克eConnect车联系统&#xff09;、全新一代Super Cruise超级辅助驾驶系统&#…

7.SpringSecurity中的权限管理

SpringSecurity中的权限管理 SpringSecurity是一个权限管理框架&#xff0c;核心是认证和授权&#xff0c;前面已经系统的给大家介绍过了认证的实现和源码分析&#xff0c;本文重点来介绍下权限管理这块的原理。 一、权限管理的实现 服务端的各种资源要被SpringSecurity的权限…

ccc-pytorch-卷积神经网络介绍(5)

文章目录一、卷积二、池化三、Batch Norm四、经典卷积网络简单介绍一、卷积 卷积连续函数形式&#xff1a; F(x)∫f(t)g(x−t)dtF(x)\int f(t)g(x-t)dtF(x)∫f(t)g(x−t)dt 物理意义是一个函数在另一个函数上的加权叠加。在2D卷积中指卷积核在数据矩阵中分割出的矩阵和卷积核相…

PMP和软考高项集成,更应该考哪个呢?

要看你自己的偏向&#xff0c;要说考的话&#xff0c;我是觉得都值得考的&#xff0c;一个证一份技术嘛。 我给你稍微介绍一下&#xff0c;PMP都是美国PMI发起的考试&#xff0c;软考高项是国内的考试。PMP是项目管理证书&#xff0c;学习的内容是项目管理&#xff0c;包含大约…

研报精选230306

目录 【行业230306东亚前海证券】食品饮料行业2023年年度投资策略&#xff1a;复苏在途&#xff0c;蓄势待发【行业230306国金证券】基础化工行业研究&#xff1a;MDI价格上行&#xff0c;新一轮国企改革在即【行业230306中银证券】华为汽车产业链深度报告&#xff1a;三种合作…

k8s控制器

目录 一、控制器简介 二、控制器类型 1、RC和RS 2、Deployment 3、DaemonSet 4、Job 5、CronJob 6、StateFulSet 7、HPA 一、控制器简介 在kubernetes中&#xff0c;按照Pod的创建方式可以将其分为两类&#xff1a; 自主式:kubernetes直接创建出来的Pod&#xff0c;…

【Alamofire】【Swift】属性包装器注解@propertyWrapper

Alamofire 中的源码例子 import Foundationprivate protocol Lock {func lock()func unlock() }extension Lock {/// Executes a closure returning a value while acquiring the lock.////// - Parameter closure: The closure to run.////// - Returns: The value…

9.SpringSecurity核心过滤器-SecurityContextPersistenceFilter

SpringSecurity核心过滤器-SecurityContextPersistenceFilter 一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个&#xff0c;作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包&#xff0c;认证和授权的核心代码都在这里面spring-security-co…

Promise入门

Promise入门 Promise的基本概念 男女相爱了&#xff0c;女方向男方许下一个承诺怀孕new Promise&#xff0c;这是会产生两种结果怀上(resolve)和没怀上(reject)&#xff0c;resolve对应then&#xff0c;reject对应catch&#xff0c;无论是否怀上都会执行finally。 <script&…

【论文速递】CASE 2022 - EventGraph: 将事件抽取当作语义图解析任务

【论文速递】CASE 2022 - EventGraph: 将事件抽取当作语义图解析任务 【论文原文】&#xff1a;https://aclanthology.org/2022.case-1.2.pdf 【作者信息】&#xff1a;Huiling You, David Samuel, Samia Touileb, and Lilja vrelid 论文&#xff1a;https://aclanthology.o…

sql server 对比两个查询性能 ,理解Elapsed Time、CPU Time、Wait Time

分析 SET STATISTICS TIME ONyour sqlSET STATISTICS TIME OFF由上图分析: cpu time 是查询执行时占用的 cpu 时间。如果了解系统的多任务机制&#xff0c;就会知道系统会将整个 cpu 时间分为一个一个时间片&#xff0c;平均分配给运行的线程——一个线程在 cpu 上运行一段时间…

《PyTorch深度学习实践9》——卷积神经网络-高级篇(Advanced-Convolution Neural Network)

一、1∗11*11∗1卷积 由下面两张图&#xff0c;可以看出1∗11*11∗1卷积可以显著降低计算量。 通常1∗11*11∗1卷积还有以下功能&#xff1a; 一是用于信息聚合&#xff0c;同时增加非线性&#xff0c;1∗11*11∗1卷积可以看作是对所有通道的信息进行线性加权&…

Air101|Air103|Air105|Air780E|ESP32C3|ESP32S3|Air32F103开发板:概述及PinOut

1、合宙Air101&#xff08;芯片及开发板&#xff09; 合宙Air101是一款QFN32 封装&#xff0c;4mm x 4mm 大小的mcu。通用串口波特率&#xff0c;设置波特率为921600。 ​ 管脚映射表 GPIO编号 命名 默认功能及扩展功能 0 PA0 BOOT 1 PA1 I2C_SCL/ADC0 4 PA4 I2C_S…

前端必备技术之——AJAX

简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML(现在已经基本被json取代)。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组…

揭秘关键一环!数据安全服务大盘点

数据安全服务&#xff0c;数据安全体系建设的关键一环。通过数据安全服务解决数据安全建设难题&#xff0c;得到越来越多的重视。不久前&#xff0c;《工业和信息化部等十六部门关于促进数据安全产业发展的指导意见》发布&#xff0c;明确“壮大数据安全服务”&#xff0c;推进…