输入一个只包含“L”和“R”的字符串,并且其中"L"与"R"的个数是相等的。符合这种输入条件的字符串称为平衡字符串。尝试编程对输入的平衡字符串进行分割, 尽可能多地分割出平衡字符串子串,并将可以得到的子串数量返回。

例如,输入“RLLLRRRL”将返回3,其可以分割成“RL”、“LLRR”和“RL”。输入“LLLRRR”将返回1,因为其只能分割出“LLLRRR”。

思路

本题非常简单,属于字符串分割相关题目中的入门级题目。解决本题的核心是对平衡字符串进行理解。我们只需要掌握平衡字符串的核心即可: 其中字符“L”与字符“R”的个数相同。在编写程序时,我们可以对字符串进行遍历,对每一个字符进行检查,使用两个变量对字符“L”和字符“R”进行计数, 每当字符“L”的个数与字符“R”的个数相同时,即表明可以分割出一个平衡的子字符串。

实现

package chapter06

func balancedStringSplit(str string) (n int) {
    // 分别记录'R'和'L'的个数
    var r, l int
    for _, v := range str {
        if v == 'R' {
            r++
        } else if v == 'L' {
            l++
        }
        if r == l {
            n++
            r = 0
            l = 0
        }
    }
    return
}