【LeetCode2696】删除子串后的字符串最小长度

这篇具有很好参考价值的文章主要介绍了【LeetCode2696】删除子串后的字符串最小长度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、题目描述

【题目链接】
标签:字符串模拟
难度:简单
给你一个仅由 大写 英文字符组成的字符串 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 仅由大写英文字母组成

2、基本思路

 这是一道简单的字符串处理的题目,可以用栈模型上述的删除的过程即可,值得注意的是,删除子串后,重新连接出的字符串可能会产生新的 “AB” 或 “CD” 子串。

下面是利用栈对示例 1 模拟的过程:文章来源地址https://www.toymoban.com/news/detail-796294.html

  • 初始化栈空;
  • 栈空,A入栈;
  • 当前元素B,与栈顶元素A,构成子串AB,A出栈;
  • 栈空,F入栈;
  • 当前元素C,栈顶元素F,构不成子串,C入栈;
  • 当前元素A,栈顶元素C,构不成子串,A入栈;
  • 当前元素C,栈顶元素A,构不成子串,C入栈;
  • 当前元素D,栈顶元素C,构成子串CD,C出栈;
  • 当前元素B,栈顶元素A,构成子串AB,A出栈;
  • 字符串元素遍历完毕,栈中元素的长度即为答案;

3、代码实现


int minLength(string s) {
    stack<char> st;
    for(int i = 0;i<s.length();++i)
    {
        char c = s[i];
        if(st.empty())
            st.push(c);
        else
        {
            if(c=='D'&&st.top()=='C')
                st.pop();
            else if(c=='B'&&st.top()=='A')
                st.pop();
            else
                st.push(c);
        }
    }
    return st.size();    
}

到了这里,关于【LeetCode2696】删除子串后的字符串最小长度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法之字符串: Leetcode 696. 计数二进制子串 (Typescript版)

    计数二进制子串 https://leetcode.cn/problems/count-binary-substrings/ 描述 给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。 重复出现(不同位置)的子串也要统计它们出现的次数。 示例 1: 示

    2024年02月01日
    浏览(37)
  • 【LeetCode】583. 两个字符串的删除操作

    这道题的状态定义和 1143. 最长公共子序列 相同,「定义一个 dp 数组,其中 dp[i]表示 到位置 i 为止的子序列性质 ,并不是必须以 i 结尾」,此时 dp 数组的最后一位即为题目所求,不需要对每个位置进行统计。 状态定义 dp[i][j] 表示到 字符串word1 的第 i 个字符为止、word2 的第

    2024年02月06日
    浏览(34)
  • LeetCode | C++ 动态规划——583. 两个字符串的删除操作、72. 编辑距离

    583题目链接 做法一: 本题和1143.最长公共子序列基本相同,只要求出两个字符串的最长公共子序列长度即可,那么除了最长公共子序列之外的字符都是必须删除的,最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。 做法二: 本题和115.不同的子

    2024年02月16日
    浏览(41)
  • 代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

            时间复杂度高         写完代码多思考怎么优化

    2024年01月22日
    浏览(39)
  • (栈和队列) 1047. 删除字符串中的所有相邻重复项 ——【Leetcode每日一题】

    难度:简单 给出由小写字母组成的字符串 S , 重复项删除操作 会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例: 输入 :“abbaca” 输出 :“ca” 解释

    2024年02月08日
    浏览(32)
  • 字符串解码:给一个字符串,返回解码后的字符串。

    字符串解码,给一个字符串s,返回解码后的字符串。字符串编码规则为k[str]表示括号内部str字符串正好重复k次,k保证为整数,并且输入的字符串肯定符合这种编码规则不会有额外的空格。 注意事项: 注意括号可能发生嵌套,例如输入字符串为 3[a2[c]] 应该返回accaccacc 1 = s

    2024年02月16日
    浏览(30)
  • c 取字符串中的子串

    strcpy(S.ch,ch1) 赋值函数; 字符串没特殊处理,就是从0开始的 %s输出字符串,%c输出字符

    2024年02月07日
    浏览(29)
  • 练习题 替换子串得到平衡字符串

    题目 有一个只含有  \\\'Q\\\', \\\'W\\\', \\\'E\\\', \\\'R\\\'  四种字符,且长度为  n  的字符串。 假如在该字符串中,这四个字符都恰好出现  n/4  次,那么它就是一个「平衡字符串」。 给你一个这样的字符串  s ,请通过「替换一个 子串 」的方式,使原字符串  s  变成一个「平衡字符串」。

    2024年01月18日
    浏览(40)
  • C++ 字符串中找子串出现的个数。

    字符串中找子串出现的个数。 #include stdio.h #include string.h int find(char *s) {          char str[] = \\\"program\\\";     for (int i = 0; i strlen(str); i++) {         if (s[i] != str[i])             return 0;     }     return 1; }   void main() {     char msg[100];     int i=0,cnt = 0;     gets(msg);     do {      

    2024年01月20日
    浏览(35)
  • 代码随想录第十一天 | ​​​​​​LeetCode 20. 有效的括号、​​​​​​LeetCode 1047. 删除字符串中的所有相邻重复项、​​​​​​LeetCode 150. 逆波兰表达式求

    目录 ​​​​​​LeetCode 20. 有效的括号 文章讲解:代码随想录(programmercarl.com) 视频讲解:栈的拿手好戏!| LeetCode:20. 有效的括号_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 1047. 删除字符串中的所有相邻重复项 文章讲解:代码随想录(programmercarl.com) 视频讲解:栈的好戏还

    2024年02月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包