【Leetcode每日笔记】1221.分割平衡字符串(Python)

题目

在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。

给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。

返回可以通过分割得到的平衡字符串的最大数量。

示例 1:

输入:s = “RLRRLLRLRL” 输出:4 解释:s 可以分割为 “RL”, “RRLL”, “RL”, “RL”,
每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。

示例 2:

输入:s = “RLLLLRRRLR” 输出:3 解释:s 可以分割为 “RL”, “LLLRRR”, “LR”,
每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。

示例 3:

输入:s = “LLLLRRRR” 输出:1 解释:s 只能保持原样 “LLLLRRRR”.

提示:

1 <= s.length <= 1000
s[i] = 'L' 或 'R'
分割得到的每个字符串都必须是平衡字符串。

解题思路

栈操作

类比于括号匹配(有效的括号),使用栈操作,L与R匹配,如此时栈中有元素R,L此时要进栈,与R匹配,则R出栈。栈为空则表示匹配完成了一个平衡字符串。

代码

class Solution:
    def balancedStringSplit(self, s: str) -> int:
        stack = []
        s_list = list(s)
        ans = 0
        for i in s_list:
            if not stack:
                ans += 1
                stack.append(i)
                continue
            else:
                if i != stack[-1]:
                    stack.pop()
                else:
                    stack.append(i)
        return ans

猜你喜欢

转载自blog.csdn.net/qq_36477513/article/details/111357318