# 题目: 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' 。

# 题解: 贪心

对于一个平衡字符串,但从某个地方截取出一个平衡字符串,那么剩下的必然也是一个平衡字符串。

所以,我们可以遍历字符串s,对单个字符进行统计(flag=0)

  1. 当 是 L,则 flag++
  2. 当 是 R,则 flag--
  3. 当 flag再次为0,则说明前面的为一个平衡字符串。
  4. 剩下的也为平衡字符串,就继续遍历,直到遍历完字符串

# 代码

/**
 * @param {string} s
 * @return {number}
 */
var balancedStringSplit = function(s) {
    let ans =0, d=0;
    for(let i=0;i<s.length;i++){
        let ch = s[i]
        if(ch ==='R') ++d
        else --d
        if(d ===0) ans++
    }
    return ans
};

# 参考资料

  1. 1221. 分割平衡字符串 (opens new window)
  2. 官方题解 (opens new window)