​LeetCode解法汇总2696. 删除子串后的字符串最小长度

news2024/5/18 17:15:50

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)


描述:

给你一个仅由 大写 英文字符组成的字符串 s 。

你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。

通过执行操作,删除所有 "AB" 和 "CD" 子串,返回可获得的最终字符串的 最小 可能长度。

注意,删除子串后,重新连接出的字符串可能会产生新的 "AB" 或 "CD" 子串。

示例 1:

输入:s = "ABFCACDB"
输出:2
解释:你可以执行下述操作:
- 从 "ABFCACDB" 中删除子串 "AB",得到 s = "FCACDB" 。
- 从 "FCACDB" 中删除子串 "CD",得到 s = "FCAB" 。
- 从 "FCAB" 中删除子串 "AB",得到 s = "FC" 。
最终字符串的长度为 2 。
可以证明 2 是可获得的最小长度。

示例 2:

输入:s = "ACBBD"
输出:5
解释:无法执行操作,字符串长度不变。

提示:

  • 1 <= s.length <= 100
  • s 仅由大写英文字母组成

解题思路:

这题还是比较简单的,因为s的长度为100以内,所以可以直接按照题目的描述去实现。时间复杂度其实是O(n2)。

如果这题的长度改为10W,则肯定就不行了,那时候就需要把时间复杂度限制到O(n)了。这时,就需要从前向后寻找AB或者CD,删除后,检查删除位置的前后是否构成新的AB或者CD,如果是则继续删除,而不是每次都从头查询。

代码:

class Solution {
public:
    int minLength(string s)
    {
        while (true)
        {
            bool flag = true;
            size_t index = s.find("AB");
            if (index != std::string::npos)
            {
                s = s.substr(0, index) + s.substr(index + 2, s.size() - index - 2);
                flag &= false;
            }
            index = s.find("CD");
            if (index != std::string::npos)
            {
                s = s.substr(0, index) + s.substr(index + 2, s.size() - index - 2);
                flag &= false;
            }
            if (flag)
            {
                break;
            }
        }
        return s.size();
    }
};

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

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

相关文章

关于网络安全,你了解多少?

随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显。国际标准化组织&#xff08;ISO&#xff09;对计算机网络安全做出了明确定义&#xff1a;为保护数据处理系统而采取的技术和管理的安全措施&#xff0c;旨在保护计算机硬件、软件和数据免受偶然和故意原因造成的破坏…

Apipost IDEA插件,真的超好用

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

明年评职称,现在就要准备论文了吗?

明年评职称不仅需要提前补好继续教育课时&#xff0c;同样的还需要准备好论文和业绩材料&#xff0c;初级职称的相对来说对论文和业绩要求不高&#xff0c;但是中高级职称业绩和论文的质量代表着你的评审通过率&#xff0c;那为什么需要提前准备好呢&#xff1f;甘建二再给大家…

相机成像之图像传感器与ISP【四】

文章目录 1、图像传感器基础1.1 基础原理——光电效应1.2 基础的图像传感器设计1.3 衡量传感器效率的一个关键指标&#xff1a;光量子效率&#xff08;QE&#xff09;1.4 感光单元的响应1.5 像素的满阱容量1.6 像素尺寸和填充比例1.7 微透镜的作用1.8 光学低通滤波器简介1.9 传…

web开发学习笔记(1.html css)

css负责布局 js负责动作 2.磁盘路径 3.水平线标签 4.引入css 5.无语义标签 6.选择器 7.播放视频和音频 8.换行 <br> 9.段落标签 <p></p> 10.首行缩进 11.边距 12.盒子模型&#xff0c;居中显示&#xff0c; margin后面的四个值顺序为上右下左&#…

原生微信小程序-两次设置支付密码校验,密码设置二次确认

效果 具体代码 1、wxml <view style"{{themeColor}}"><view classcontainer><view class"password_content"><view wx:if{{type 1}}><view class"title"><view class"main_title">设置支付密码…

[Vulnhub靶机] DriftingBlues: 6

[Vulnhub靶机] DriftingBlues: 6靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues6_vh.ova 靶机地址&#xff1a;192.168.67.25 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

使用脚本把springboot程序部署到k8s上

一般我们部署写4个文件就行了 首先分别写 Dockerfile1package.sh2build.shdocker_push.sh Dockerfile # 基于jdk1.8 FROM openjdk:8-jdk-alpine RUN echo "Asia/Shanghai" > /etc/timezone RUN mkdir /app WORKDIR /appCOPY ./monitor-flink-1.0.jar /appEXPO…

Java 数据结构篇-实现 AVL 树的核心方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 AVL 树的说明 2.0 AVL 树的成员变量及其构造方法 3.0 实现 AVL 树的核心方法 3.1 获取当前节点的高度 height(AVLNode node) 3.2 更新当前节点的高度 updateHeig…

[力扣 Hot100]Day2 字母异位词分组

题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 出处 思路 这题有点考阅读理解&#xff0c;意思就是把输入数组中的所含字母相同但顺序不同的单词放到同…

YOLOv8-Seg改进:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:OREPA在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家…

创建型模式 | 建造者模式

一、建造者模式 1、原理 建造者模式又叫生成器模式&#xff0c;是一种对象的构建模式。它可以将复杂对象的建造过程抽象出来&#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现&#xff08;属性&#xff09;的对象。创建者模式是一步一步创建一个复杂的对象&#xf…

使用SpringCache操作Redis缓存数据

SpringCache概念 SpringCache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的加一个注解&#xff0c;就能实现缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a; EHCacheCaffeineRedis 使…

vue倒计时60秒改变按钮状态效果demo(整理)

你可以使用Vue的计时器和绑定状态的方法来实现这个功能。 首先&#xff0c;在data中添加一个计时器countdown&#xff0c;初始值为0。 data() {return {countdown: 0} }<template><div><button click"startCountdown" :disabled"countdown > …

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【数据结构】7大排序最详细

0.前言 接下来进入排序&#xff0c;我们知道在c语言阶段可能就学习过了像冒泡排序&#xff0c;选择排序这种比较简单的排序&#xff0c;那么接下来我们就会学习到更加高级的排序算法。但高级代表着难度的提升&#xff0c;但不用担心&#xff0c;博主会细细来谈&#xff0c;慢慢…

九州金榜如何高质量培养孩子成长

在这个时代&#xff0c;孩子们就像温室里的花朵&#xff0c;被父母和家人宠爱着&#xff0c;享受着最优越的物质条件。 然而&#xff0c;在这样的环境中成长起来的孩子&#xff0c;却往往被很多父母称为"白眼狼"&#xff0c;对孩子的自私行为感到痛苦和失落。 1 随…

zookerper入门

zookerper介绍 ZooKeeper 是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题. ZooKeeper本质上是一个分布式的小文件存储系统&#xff08;Zookeeper文件系统监听机制&#xff09;.提供基于类似于文件系统的目录树方式的数据存储&#xff0c;并且可以…

离线安装telnet-server

telnet下载地址&#xff1a; https://vault.centos.org/ 需要下载telnet 和 telnet-server 确认自己的服务器版本&#xff0c;我这里使用的是&#xff08;Red Hat Enterprise Linux Server release 7.0 (Maipo)&#xff09;对应的是Centos 7.0,所有到 https://vault.centos.or…

HarmonyOS应用开发学习笔记 UI布局学习 创建轮播(Swiper) artTS 轮播组件 简单使用

官方文档 Swiper组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 1、简单用法 loop 控制是否循环 …