每日一练 2024.6.7

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

分析

        题目要求通过删除任意一个 "AB" 或 "CD" 子字符串,得到最后最短可能的字符串长度。由于被删除的子字符串是固定的,因此每次只需要检查当前字符串中是否存在这些子字符串,并且如果存在就删除。我们可以通过利用栈这种数据结构实现这个过程,栈在处理相邻字符匹配的情况下非常高效,因为栈是后进先出 (LIFO) 的数据结构。

详细分析步骤:

  1. 初始化栈

    • 使用一个空栈来存放字符。
  2. 遍历字符串

    • 遍历字符串 s 中的每一个字符。
  3. 检查相邻字符

    • 在遍历时,检查栈顶字符和当前遍历字符是否可以组成 "AB" 或 "CD" 子字符串。
      • 如果栈顶字符与当前字符能组成 "AB" 或 "CD",说明这些字符可以被删除。
      • 使用 stack.pop() 处理这种情况,即删除栈顶字符,相当于删除子串中的其中一个字符,当前字符也就被忽略。
      • 如果不能组成 "AB" 或 "CD",则将当前字符放入栈中。
  4. 计算最终结果

    • 遍历结束,栈中剩余的字符即是无法再被删除的字符。
    • 栈中字符的数量就是最终的字符串长度。

流程图

开始
↓
初始化一个空栈
↓
遍历字符串中的每一个字符
↓
检查栈顶字符和当前字符是否可以形成 "AB" 或 "CD"
↓
是 ——> 弹出栈顶字符
↓
否 ——> 将当前字符入栈
↓
遍历结束
↓
栈中剩余字符的数量即为最终字符串的最小长度
↓
结束

代码讲解

class Solution {public int minLength(String s) {// 创建一个栈来存放字符Stack<Character> stack = new Stack<>();// 遍历字符串中的每一个字符for (char c : s.toCharArray()) {// 检查栈顶字符和当前字符是否可以形成 "AB" 或 "CD"if (!stack.isEmpty() && ((stack.peek() == 'A' && c == 'B') || (stack.peek() == 'C' && c == 'D'))) {stack.pop(); // 如果是,则移除栈顶字符} else {stack.push(c); // 否则,将当前字符入栈}}// 栈中的剩余字符数量即为最终字符串的最小可能长度return stack.size();}
}
讲解
  • 初始化栈
   Stack<Character> stack = new Stack<>();
  • 创建一个空的栈对象,用于存放字符。
  • 遍历字符串
   for (char c : s.toCharArray()) {
  • 使用增强 for 循环将字符串 s 转成字符数组并逐个遍历字符。
  • 检查相邻字符
   if (!stack.isEmpty() && ((stack.peek() == 'A' && c == 'B') || (stack.peek() == 'C' && c == 'D'))) {stack.pop();} else {stack.push(c);}
  • 使用 !stack.isEmpty() 检查栈是否非空。
  • 使用 stack.peek() 获取栈顶字符,并检查当前字符 c 和栈顶字符是否匹配可构成 "AB" 或 "CD" 对。
    • 如果匹配:
       stack.pop();

删除栈顶字符,因为构成了 "AB" 或 "CD"。

  • 如果不匹配:
       stack.push(c);

将当前字符加入栈中。

  • 计算结果
   return stack.size();
  • 遍历结束后,栈中剩下的字符数量即为最终字符串的最小可能长度。

知识点解析

  • 栈 (Stack):

    • 栈是一种后进先出 (LIFO: Last In, First Out) 的数据结构。在这里,我们利用栈的这一特性来匹配相邻的字符,方便地处理 "AB" 和 "CD" 子串的删除操作。
  • 字符串遍历

    • 代码中的 for (char c : s.toCharArray()) 是一种常见的逐字符遍历字符串的方法。
  • 条件判断

    • 利用条件判断 if (!stack.isEmpty() && ((stack.peek() == 'A' && c == 'B') || (stack.peek() == 'C' && c == 'D'))),我们可以高效地匹配和删除满足条件的子串。
知识点详细解释
栈 (Stack)一种后进先出 (LIFO) 的数据结构,支持 pushpoppeek, 和 isEmpty 等操作。
遍历字符串toCharArray() 方法将字符串转换成字符数组,可以使用增强 for 循环来逐字遍历。
条件判断使用 if 语句结合 && 和 `
算法思想利用栈的性质处理相邻字符的匹配与删除问题,避免繁琐和低效的字符串替换操作,保持高效性。

2024.6.7

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

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

相关文章

如何备份和恢复华为手机?

智能手机已成为我们日常生活中不可或缺的一部分&#xff0c;它们存储着大量敏感数据。因此&#xff0c;确保数据安全&#xff0c;定期备份至关重要&#xff0c;以防手机意外丢失、损坏或被盗。 如果您拥有华为设备&#xff0c;并且正在寻找如何将华为手机备份到PC的方法&#…

爱校对繁体字校对上线——让企业文档更精准

在港澳台地区&#xff0c;企业每天都要处理大量繁体字文档&#xff0c;确保文档的准确性和专业性至关重要。爱校对全新推出的繁体字校对服务&#xff0c;专为企业设计&#xff0c;自动检测并修正拼写和语法错误&#xff0c;让您的文档管理更加轻松高效&#xff0c;提升企业形象…

【权威主办|投稿优惠】2024年应用物理、力学与数学国际会议(APMM 2024)

2024年应用物理、力学与数学国际会议&#xff08;APMM 2024&#xff09; 2024 International Conference on Applied Physics, Mechanics, and Mathematics 【重要信息】 大会地点&#xff1a;南昌 大会官网&#xff1a;http://www.iacapmm.com 投稿邮箱&#xff1a;iacapmmsu…

香港优才diy推荐信很难写?看看140分获批的人怎么写!(附上模板)

大家好&#xff0c;我是已获批香港优才的糖爸。 香港优才diy推荐信作为申请材料中的重要一环&#xff0c;对于申请人过往工作的综合软实力和入境处的审核具有重要影响。如何撰写一份优秀的雇主推荐信呢&#xff1f;就我的获批经验来谈谈。 一、明确推荐信的目的 雇主推荐信的主…

外贸干货|如何提高商机转化率?

常常听到外贸业务员抱怨“询盘质量不高”、“有询盘没转化”、“有些客户只是来比价格的”……想必大家都不陌生&#xff01; 但难道只有询盘问题、客户问题吗&#xff1f;我们自身的处理真的没问题吗&#xff1f;我想只有更多的自省自查我们可以控制的问题&#xff0c;优化我们…

大模型在信用卡行业的应用探索

2022年11月&#xff0c;OpenAI发布ChatGPT3.5&#xff0c;迅速引起各界广泛关注&#xff0c;引发了人工智能领域新一轮发展热潮。ChatGPT作为一款基于人工智能技术的大语言模型&#xff08;LLMs&#xff09;&#xff0c;在文本生成、对话理解、多领域知识覆盖等方面具有卓越表现…

替代LT3741大功率20A恒压恒流驱动器

1. 产品特性(替代LT3741) ➢ CTRL 引脚对输出电流提供精确控制 ➢ 2%的电压调节精度 ➢ 6%的电流调节精度 ➢ 输入电压范围&#xff08;外接达林顿 NPN 管&#xff09;&#xff1a; 6V~40V ➢ 输入电压范围&#xff08;外接单颗 NPN 管&#xff09;&#xff1a; 5.25V~40V…

markdown图片离线备份,批量替换url

之前在某站写了很多笔记&#xff0c;最近想着迁移备份下&#xff0c;找到了接口写了个脚本将文章爬取下来了。文章是基于 Markdown 格式的&#xff0c;在写作时粘贴图片&#xff0c;直接上传到他们图床服务器了。Markdown 文本里面是个<img src"https://aaa.com/bbb.jp…

神经网络 torch.nn---Containers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn是Neural Network的简称&#xff0c;帮助程序员方便执行如下的与神经网络相关的行为&#xff1a; &#xff08;1&#xff09;创建神经网络 &#xff08;2&#xff09;训练…

RERCS系统开发实战案例-Part01 快速启动面板创建新功能启动面板

需求背景&#xff1a;RERCS系统设计合同应收付比例调整界面&#xff0c;目的为合同与应收付款调整关联&#xff0c;保证数据的完整性与准确性。 步骤① 参数化快速启动板事务码 &#xff1a;LPD_CUST_PARAM 选择对应的角色与实例 可以看到系统中的快速启动面板菜单中已有的功能…

SD卡格式化怎么恢复?一键扫描,轻松找回丢失的数据

SD卡格式化怎么恢复数据&#xff1f;在日常生活中&#xff0c;我们常常会使用SD卡来存储各种数据&#xff0c;如照片、视频、文档等。然而&#xff0c;当SD卡意外格式化或者出现其他问题时&#xff0c;里面的数据就会面临丢失的风险。 此时&#xff0c;如何恢复格式化的SD卡就…

2024-06-06 问AI: 在深度学习中,什么是欧几里德长度?

文心一言 在深度学习中&#xff0c;欧几里德长度&#xff08;也称为欧几里得距离或欧氏距离&#xff09;是一个常用的概念&#xff0c;它衡量的是在多维空间中两个点之间的真实距离&#xff0c;或者说是向量的自然长度&#xff08;即该点到原点的距离&#xff09;。以下是关于…

【ARM Cache 及 MMU 系列文章 6.3 -- ARMv8/v9 Cache Tag数据读取及分析】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…

问题:卫生事业的发展受多种因素的影响和制约,以下属于卫生事业发展影响因素的有(? ?)。 #微信#其他

问题&#xff1a;卫生事业的发展受多种因素的影响和制约&#xff0c;以下属于卫生事业发展影响因素的有&#xff08;? ?&#xff09;。 A、经济水平 B、管理水平 C、人口素质 D、科技发展 参考答案如图所示

做外贸一些恶心人但是却很有效果的方法

最近在国内的网购平台上买了一些日用品&#xff0c;一般情况下&#xff0c;我在购物的时候&#xff0c;会打算买什么&#xff0c;然后就直接打上这个产品的名称&#xff0c;然后去选择自己喜欢的图片样式&#xff0c;接着看对应的价格&#xff0c;再选择要不要购买。 但是最近…

RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析

RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析 摘要&#xff1a;本文将基于RockPI 4A单板&#xff0c;介绍Linux 4.4内核下RK3399 GPIO&#xff08;通用输入输出&#xff09;功能的使用方法。通过详细的代码解析和示例&#xff0c;帮助读者理解如何在Linux内核中使用GPI…

PCL 高阶多项式曲线回归拟合(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 高阶多项式曲线回归(Polynomial Regression)是一种线性回归模型的扩展,它允许数据拟合一个非线性的曲线。虽然多项式本身是非线性的,但我们可以通过引入新的变量(例如,原始变量的平方、立方等)来将问题转化为…

240508Scala笔记

240508Scala笔记 Scala概述: SCala是Java的拓展,在Java的基础上又拓展了一些语法,例如: 输出Hello World println("HelloWorld")System.out.println("Hello Scala from Java") 上面两段代码都可以输出内容. package chapter01 ​ /*object: 关键字,声明…

深度学习革命-AI发展详解

深度学习革命 《深度学习革命》是一部引人深思的作品&#xff0c;详细讲述了深度学习技术的发展历程及其对各个行业的深远影响。由杰出的计算机科学家、深度学习专家撰写&#xff0c;这本书不仅适合科技领域的专业人士阅读&#xff0c;也为普通读者提供了一个理解人工智能革命…

vue数组在浏览器里可以看到值, 但是length为空

arr数组 length为0, 检查了代码在created 里调用了 this.getEnergyList(); 和 this.initChart(); 问题就在这里, this.initChart用到了getEnergyList里的数据, 造成了数据异步, 把this.initChart(); 放入 this.getEnergyList(); 方法里即可解决问题