1. 程式人生 > 其它 >【Leetcode每日筆記】1221.分割平衡字串(Python)

【Leetcode每日筆記】1221.分割平衡字串(Python)

技術標籤: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