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

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

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

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

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

示例 1:
输入:s = "aababbab"
输出:2
解释:你可以选择以下任意一种方案:
下标从 0 开始,删除第 2 和第 6 个字符("aababbab" -> "aaabbb"),
下标从 0 开始,删除第 3 和第 6 个字符("aababbab" -> "aabbbb")。示例 2:
输入:s = "bbaaaaabb"
输出:2
解释:唯一的最优解是删除最前面两个字符。提示:
1 <= s.length <= 10^5
s[i] 要么是 'a' 要么是 'b'​ 。​

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-deletions-to-make-string-balanced
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dpa, dpb 表示以 a, b 结尾的情况下,最少的删除次数
class Solution {
public:int minimumDeletions(string s) {int n = s.size();vector<int> dpa(n, 0), dpb(n, 0);if(s[0] == 'a')dpb[0] = 1;//以 b 结尾需要删除1次elsedpa[0] = 1;for(int i = 1; i < n; ++i){if(s[i] == 'a'){dpa[i] = dpa[i-1];dpb[i] = min(dpa[i-1]+1, dpb[i-1]+1);}else{dpa[i] = dpa[i-1]+1;dpb[i] = min(dpa[i-1], dpb[i-1]);}}return min(dpa[n-1], dpb[n-1]);}
};

172 ms 50.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

DistCp迁移Hive数据过程中源集群增加删除文件等场景测试

1 概述 由于在数据迁移过程中&#xff0c;上层任务仍在运行&#xff0c;会出现源集群新增文件及删除文件的情况&#xff0c;因此进行测试 2 需要同步的数据文件说明 源集群&#xff1a;192.168.40.100:8020&#xff0c;目标集群&#xff1a;192.168.40.200:8020   数据目录及…

CentOS6.0 yum php mcrypt 扩展安装问题

基本原理是&#xff1a;首先使mcrypt软件能够运行&#xff0c;然后安装php扩展模块&#xff0c;并在php.ini配置。 这里注意的是mcrypt软件依赖libmcrypt和mhash两个库&#xff0c;所以安装配置顺序从右至左 I 下载安装mcrypt 1.先去http://www.sourceforge.net 下载Libmcrypt,…

我不想用for循环

为什么要挑战自己在代码里不写for loop&#xff1f;因为这样可以迫使你去使用比较高级、地道的语法或库。文中以python为例子&#xff0c;讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。 这是一个挑战。我要你避免在任何情况下写for循环。同样的&#xff0c;我也…

LeetCode 1654. 到家的最少跳跃次数(BFS)

文章目录1. 题目2. 解题1. 题目 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 往后 跳恰好 b 个位置&#xff08;即往左跳&…

一台服务器上部署多个Terracotta的方法

在window server 2003 下&#xff0c;利用apache2.2.11tomcat6terracotta 群集不能复制session&#xff08;http://forums.terracotta.org/forums/posts/list/2342.page&#xff09; 其中提到更新服务器配置的方法&#xff1a; bin/tim-get.sh upgrade tc-config.xml 实际upgra…

Maven详解及实例

1 什么是Maven Maven对项目进行模型抽象&#xff0c;充分运用的面向对象的思想&#xff0c;Maven可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。简单的来说Maven是…

Python多线程详解

1、多线程的理解 多进程和多线程都可以执行多个任务&#xff0c;线程是进程的一部分。线程的特点是线程之间可以共享内存和变量&#xff0c;资源消耗少&#xff08;不过在Unix环境中&#xff0c;多进程和多线程资源调度消耗差距不明显&#xff0c;Unix调度较快&#xff09;&…

LeetCode 1655. 分配重复整数(回溯)

文章目录1. 题目2. 解题2.1 回溯1. 题目 给你一个长度为 n 的整数数组 nums &#xff0c;这个数组中至多有 50 个不同的值。 同时你有 m 个顾客的订单 quantity &#xff0c;其中&#xff0c;整数 quantity[i] 是第 i 位顾客订单的数目。请你判断是否能将 nums 中的整数分配给…

Flink的异步I/O及Future和CompletableFuture

1 概述 Flink在做流数据计算时&#xff0c;经常要外部系统进行交互&#xff0c;如Redis、Hive、HBase等等存储系统。系统间通信延迟是否会拖慢整个Flink作业&#xff0c;影响整体吞吐量和实时性。 如需要查询外部数据库以关联上用户的额外信息&#xff0c;通常的实现方式是向数…

MYSQL账户管理及主要操作

账户管理 在生产环境下操作数据库时&#xff0c;绝对不可以使用root账户连接&#xff0c;而是创建特定的账户&#xff0c;授予这个账户特定的操作权限&#xff0c;然后连接进行操作&#xff0c;主要的操作就是数据的crudMySQL账户体系&#xff1a;根据账户所具有的权限的不同&a…

LeetCode 1656. 设计有序流(数组)

文章目录1. 题目2. 解题1. 题目 有 n 个 (id, value) 对&#xff0c;其中 id 是 1 到 n 之间的一个整数&#xff0c;value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流&#xff0c;以 任意 顺序获取 n 个 (id, value) 对&#xff0c;并在多次调用时 按 …

#define typedef 区别

1) #define是预处理指令&#xff0c;在编译预处理时进行简单的替换&#xff0c;不作正确性检查&#xff0c;不关含义是否正确照样带入&#xff0c;只有在编译已被展开的源程序时才会发现可能的错误并报错。例如&#xff1a; #define PI 3.1415926 程序中的&#xff1a;areaPI*r…

flask框架+mysql数据库并与前台数据交互

在Flask使用数据库 我们将使用Flask-SQLAlchemy 的扩展来管理数据库。由SQLAlchemy项目提供的&#xff0c;已封装了关系对象映射&#xff08;ORM&#xff09;的一个插件。 ORMs允许数据库程序用对象的方式替代表和SQL语句。面向对象的操作被ORM转化为数据库命令。这样就意味着&…

Canal原理及其使用

1 什么是canal canal是用java开发的基于数据库增量日志解析&#xff0c;提供增量数据订阅&消费的中间件。目前&#xff0c;canal主要支持了MySQL的binlog解析&#xff0c;解析完成后才利用canal client 用来处理获得的相关数据。&#xff08;数据库同步需要阿里的otter中间…

LeetCode 1657. 确定两个字符串是否接近

文章目录1. 题目2. 解题1. 题目 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转换为另一…

Google C++编程风格指南(一):背景

Google 的项目大多使用 C开发。每一个 C程序员也都知道&#xff0c;C具有很多强大的语言特性&#xff0c;但这种强大不可避免的导致它的复杂&#xff0c;而复杂性会使得代码更容易出现 bug、难于阅读和维护。 本指南的目的是通过详细阐述如何进行 C编码来规避其复杂性&#xf…

机器学习简介及学习思维导图

什么是机器学习机器学习是人工智能的一个分支。人工智能的研究是从以“推理”为重点到以“知识”为重点&#xff0c;再到以“学习”为重点&#xff0c;一条自然、清晰的脉络。机器学习是实现人工智能的一个途径&#xff0c;即以机器学习为手段解决人工智能中的问题。机器学习算…

LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 &…

1057: [ZJOI2007]棋盘制作 - BZOJ

Description国际象棋是世界上最古老的博弈游戏之一&#xff0c;和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想&#xff0c;棋盘是一个8*8大小的黑白相间的方阵&#xff0c;对应八八六十四卦&#xff0c;黑白对应阴阳。而我们的主人公小Q&#xff0c…

机器学习:Scikit-learn与特征工程

“数据决定了机器学习的上限&#xff0c;而算法只是尽可能逼近这个上限”&#xff0c;这句话很好的阐述了数据在机器学习中的重要性。大部分直接拿过来的数据都是特征不明显的、没有经过处理的或者说是存在很多无用的数据&#xff0c;那么需要进行一些特征处理&#xff0c;特征…