LeetCode 2696.删除子串后的字符串最小长度:栈

【LetMeFly】2696.删除子串后的字符串最小长度:栈

力扣题目链接:https://leetcode.cn/problems/minimum-string-length-after-removing-substrings/

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

方法一:栈

使用一个栈存放字符串剩下的元素,遍历字符串:

  • 如果当前字符是B并且栈顶元素是AA出栈
  • 否则如果当前字符是D并且栈顶元素是CC出栈
  • 否则当前字符入栈

最终返回栈中元素的个数即可。

  • 时间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))
  • 空间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))

AC代码

C++
class Solution {
   
public:
    int minLength(string s) {
   
        stack<char> st;
        for (char c : s) {
   
            if (c == 'B' && st.size() && st.top() == 'A') {
   
                st.pop();
            }
            else if (c == 'D' && st.size() && st.top() == 'C') {
   
                st.pop();
            }
            else {
   
                st.push(c);
            }
        }
        return st.size();
    }
};
Python
class Solution:
    def minLength(self, s: str) -> int:
        st = []
        for c in s:
            if (c == 'B' and st and st[-1] == 'A') or (c == 'D' and st and st[-1] == 'C'):
                st.pop()
            else:
                st.append(c)
        return len(st)

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135511159

相关推荐

  1. LeetCode 2696.删除字符串长度

    2024-01-11 14:56:02       36 阅读
  2. LeetCode2696删除字符串长度

    2024-01-11 14:56:02       38 阅读
  3. LeetCode 2697. 字典序回文

    2024-01-11 14:56:02       39 阅读
  4. LeetCode 2697. 字典序回文

    2024-01-11 14:56:02       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 14:56:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 14:56:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 14:56:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 14:56:02       20 阅读

热门阅读

  1. LeetCode255.用队列实现栈

    2024-01-11 14:56:02       33 阅读
  2. Kafka集群部署

    2024-01-11 14:56:02       34 阅读
  3. C语言初学函数(练习)

    2024-01-11 14:56:02       34 阅读
  4. golang实现skiplist 跳表

    2024-01-11 14:56:02       28 阅读
  5. 【Machine Learning】Optimization

    2024-01-11 14:56:02       30 阅读
  6. 概率生成函数([CTSC2006] 歌唱王国 题解)

    2024-01-11 14:56:02       33 阅读
  7. GO项目自动化-根据库表字段自动生成API

    2024-01-11 14:56:02       30 阅读
  8. 源码编译FFmpeg4.3

    2024-01-11 14:56:02       40 阅读