Leetcode-1221

tianwen42發表於2024-06-10

題目1221.分割平衡字串

難度:簡單

在一個 平衡字串 中,'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".

示例 4:

輸入:s = "RLRRRLLRLL"
輸出:2
解釋:s 可以分割為 "RL"、"RRRLLRLL" ,每個子字串中都包含相同數量的 'L' 和 'R' 。

提示:

  • 1 <= s.length <= 1000
  • s[i] = 'L' 或 'R'
  • s 是一個 平衡 字串

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/split-a-string-in-balanced-strings/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路

上樓梯問題,L下一步R上一步,在平地上num+1

"括號匹配"問題,主要是棧操作,'R'進棧,'L'出棧,棧空則匹配成功,結果加一

解題程式碼

class Solution:
    def balancedStringSplit(self, s: str) -> int:
        s=list(s)
        stack=[]
        high,num=0,0
        while s:
            if s.pop()!='R':
                high-=1
            else:
                high+=1
            if high==0:
                num+=1
        return num