【Leetcode每日筆記】1221.分割平衡字串(Python)
阿新 • • 發佈:2020-12-19
技術標籤:LeetCode一週一結字串python演算法leetcode棧
文章目錄
題目
在一個「平衡字串」中,‘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