【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

你可能感兴趣的:(LeetCode一周一结,字符串,python,算法,leetcode,栈)