题目
在一个「平衡字符串」中,‘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