【力扣每日一题】力扣2696删除子串后的字符串最小长度

题目来源

力扣2696删除子串后的字符串最小长度

题目概述

给你一个仅由 大写 英文字符组成的字符串 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 仅由大写英文字母组成

解题思路

  1. 使用栈来保存可能需要删除的前半部分子串;
  2. 当我们遇到A或者C时入栈,等待匹配;
  3. 当遇到B或D时,判断栈顶是否是对应的前一个字符,如果是则匹配成功,被删除子串长度+2,反之匹配失败,栈中的子串无法再被连续匹配,全部出栈;
  4. 当遇到的不是ABCD中的任何一个,栈中的子串都无法被连续匹配,全部出栈。

代码实现

java实现

public class Solution {public int minLength(String s) {int length = s.length();int count = 0;int[] arrayStack = new int[length];int topIndex= 0;for(int i = 0; i < length; i++) {char current = s.charAt(i);if (current == 'A' || current == 'C') {// 遇到AC入栈arrayStack[topIndex++] = current;}else if(current == 'B' || current == 'D') {// 栈为空,无法匹配,无视该字符if (topIndex == 0) {continue;}// 如果B前一个是A,或者D前一个是Cif (current - arrayStack[topIndex - 1] == 1) {count += 2;topIndex--;}else {topIndex = 0;}}else {// 如果没有遇到ABCD出栈全部字符topIndex = 0;}}return length - count;}
}

c++实现

class Solution {
public:int minLength(string s) {int length = s.length();int count = 0;vector<int> arrayStack = vector<int>(length);int topIndex = 0;for (int i = 0; i < length; i++) {char current = s[i];if (current == 'A' || current == 'C') {// 遇到AC入栈arrayStack[topIndex++] = current;}else if (current == 'B' || current == 'D') {// 栈为空,无法匹配,无视该字符if (topIndex == 0) {continue;}// 如果B前一个是A,或者D前一个是Cif (current - arrayStack[topIndex - 1] == 1) {count += 2;topIndex--;}else {topIndex = 0;}}else {// 如果没有遇到ABCD出栈全部字符topIndex = 0;}}return length - count;}
};

运行结果

java结果

c++结果

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

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

相关文章

golang 记录一次协程和协程池的使用,利用ants协程池来处理定时器导致服务全部阻塞

前言 在实习的项目中有一个地方遇到了需要协程池的地方&#xff0c;在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息&#xff0c;根据参数设置定时器进行重发。 通过这里新建kafka服务&a…

淘宝商品数据采集订单数据采集店铺数据采集API演示

淘宝商品数据采集代码 -- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-gw.cn/taobao/item_get/?key<您自己的apiKey>&secret<您自己的apiSecret>&num_iid652874751412&is_promotion1" 商品详情页与获取到的返回数据示…

深入理解 Hadoop (五)YARN核心工作机制浅析

概述 YARN 的核心设计理念是 服务化&#xff08;Service&#xff09; 和 事件驱动&#xff08;Event EventHandler&#xff09;。服务化 和 事件驱动 软件设计思想的引入&#xff0c;使得 YARN 具有低耦合、高内聚的特点&#xff0c;各个模块只需完成各自功能&#xff0c;而模…

springcloud工地智慧云平台源码

智慧工地云平台是一种基于云计算和物联网技术的解决方案&#xff0c;旨在提升工地管理的效率和安全性。它通过集成多种传感器、设备和软件系统&#xff0c;实现对工地各个环节的实时监控、数据采集和分析&#xff0c;从而实现对工地运营的全面管理和智能化决策。 智慧工地利用…

java项目启动报错排查过程——mysql服务挂了

来自前端同事无法启动后台项目的案例 Caused by: java.net.ConnectException Create breakpoint : Connection refused: connect The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 大致…

flex布局(3)

九、骰子 *{margin:0;padding: 0;box-sizing: border-box; } .flex{display: flex;flex-flow: row wrap;justify-content: space-between;align-items: center;align-content: space-between;padding:20px; } .touzi{width: 120px;height: 120px;background-color: aliceblue;…

SSL证书不受信任怎么办? SSL证书不受信任解决方案汇总

随着网络安全问题日益凸显&#xff0c;网站使用SSL证书以实现HTTPS加密及身份的可信认证&#xff0c;防止传输数据的泄露或篡改&#xff0c;已成为互联网人的共识。但SSL证书并不是部署了就能正常使用的&#xff0c;有时浏览器会提示“SSL证书不受信任”&#xff0c;这种时候该…

sg - 8503 ca双可选可编程晶体振荡器 (SPXO)

SG-8503CA可编程晶体振荡器&#xff0c;7050六引脚石英晶振&#xff0c;LV-PECL差分石英晶体振荡器&#xff0c;尺寸7.0 5.0 1.5mm轻薄型、低抖动、低耗能、低相位等特点&#xff0c;差分输出晶振非常适用于蓝牙模块、网络设备、智能家居、无线设备、OTN, BTS&#xff0c;测试…

vue配置qiankun及打包上线

项目结构 基座&#xff1a;vue3 子应用A&#xff1a;vue3 子应用B&#xff1a; react 子应用C&#xff1a;vue3vite 项目目录&#xff1a; 配置基座 首先下载qiankun yarn add qiankun # 或者 npm i qiankun -S 所有子应用也要安装&#xff0c;vue-vite项目安装 cnpm ins…

小红书达人投放策略,如何做好达人筛选工作?

随着社交媒体的发展&#xff0c;品牌投放策略也在不断变化和创新。作为一个快速崛起的社区平台&#xff0c;小红书已经成为众多品牌进行市场营销的热门选择之一。本文我们将详细描述小红书达人投放策略&#xff0c;如何做好达人筛选工作&#xff1f; 一、品牌投放策略 在小红书…

【Go】excelize库实现excel导入导出封装(三),基于excel模板导出excel

前言 大家好&#xff0c;这里是符华~ 关于excelize库实现excel导入导出封装&#xff0c;我已经写了两篇了&#xff0c;我想要的功能基本已经实现了&#xff0c;现在还差一个模板导出&#xff0c;这篇文章就来讲讲如何实现用模板导出excel。 前两篇&#xff1a; 【Go】excel…

伺服电机:伺服电机的控制方式(脉冲控制)

脉冲控制是伺服系统最常见的一种控制方式&#xff0c;基本上每家的伺服驱动器都支持脉冲模式。脉冲模式一般用于轴比较少的场合&#xff08;4轴及以下&#xff09;&#xff0c;轴数比较多的话就需要用总线来控制&#xff0c;毕竟伺服控制器的脉冲输入输出口的数量是有限的。 一…