当前位置: 首页 > article >正文

【数据结构-邻项消除】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 仅由大写英文字母组成

模拟栈

class Solution {
public:
    int minLength(string s) {
        vector<int> st;
        for(char c : s){
            st.push_back(c);
            int m = st.size();
            if(m >= 2 && (st[m-2] == 'A' && st[m-1] == 'B' || st[m-2] == 'C' && st[m-1] == 'D')){
                st.pop_back();
                st.pop_back();
            }
        }
        return st.size();
    }
};

时间复杂度:O(n),其中 n 是字符串 s 的长度。只会遍历 s 一次。

空间复杂度:O(n)。是栈的空间复杂度。

我们可以通过模拟栈的方法,当栈顶元素为B且栈顶第二个元素为A或栈顶元素为D且栈顶第二个元素为C的时候,就将他们弹出,然后遍历完字符串s后,记录模拟栈的大小即可。


http://www.kler.cn/a/376154.html

相关文章:

  • 2024 IC行业还能不能入了?
  • javascript实现md5算法(支持微信小程序),可分多次计算
  • 随机性、熵与随机数生成器:解析伪随机数生成器(PRNG)和真随机数生成器(TRNG)
  • 【AIGC】逆向拆解OpenAI官方提示词Prompt技巧:高效提升ChatGPT输出质量
  • 静态路由实现路由互通
  • [供应链] 邀请招标
  • OpenCSG传神社区月度功能更新
  • 基于SpringBoot+Vue技术的宇宙动漫网站【前后端分离】
  • 贪心算法与分数背包
  • C#版的有道智云对话接口
  • 第20课-C++【二叉搜索树】
  • 「Math」初等数学知识点大纲(占位待处理)
  • 时序数据分析:短时序分类问题
  • C++学习路线(数据库部分)二
  • 【Canal 中间件】Canal使用原理与基本组件概述
  • 前段(vue)
  • 如何解决前端发送数据到后端为空的问题
  • 【搜索引擎】俄罗斯搜索引擎yandex
  • 宠物自动喂食器方案芯片
  • MySQL的常用命令
  • 自然语言生成揭秘:AI 如何创作文本内容
  • vue3学习记录-单文件组件 CSS 功能
  • 《女巫攻击:潜伏在网络背后的隐秘威胁与防御策略》
  • sin、cos、tan的关键值点、图像、零点
  • 计算机视觉-显著性检测实验报告
  • 实习冲刺Day11