跳至主要內容

1221-分割平衡字符串

daipeng大约 2 分钟

在一个 平衡字符串 中,'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/problems/split-a-string-in-balanced-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

首先这道题的前提条件是s是一个平衡字符串,我们只需要遍历字符串,使用两个变量记录L R出现的次数,当两个次数相等时,记为一次成功的分割,这两个变量重置为0,而s本身是一个平衡字符串,可以确保剩下的字符串依然是平衡的。

 public int balancedStringSplit(String s) {
        char[] chs = s.toCharArray();
        int l = 0;
        int r = 0;
        int count = 0;
        for (char ch : chs) {
            if (ch == 'L') {
                l++;
            }else{
                r++;
            }
            if (l == r) {
                count++;
                l = 0;
                r = 0;
            }
        }
        return count;
    }