leetcode 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".
 

提示:

1 <= s.length <= 1000
s[i] = 'L' 或 'R'

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/split-a-string-in-balanced-strings

分析:

分割的最大数量, 就是将字符串s切割成一系列的子串,并且字串中R和L的数量要相等,

那问题来了怎莫切割,我们以示例1来看

示例 1:

输入:s = "RLRRLLRLRL"

从头开始

R 切割不了

RL 能切割,那到底切不切呢

继续向下看

RLRRLL也可以切割掉

RL 和RLRRLL选哪个呢

很明显题目要求字串数量大,那就肯定切割长度越小的字串越好,切RL,这道题的贪心大概就在这里吧,那么解题思路就很明显了

我们for循环遍历字串,

rcnt代表R的数量,lcnt代表L的数量,cnt代表结果

假使当前字符等于谁,谁的数量就加1,假使rcnt和lcnt刚好相等的时候,不正好就是字串R L数量相等且字串长度最小的时候嘛,那就让rcnt=0,lcnt=0,cnt+=1,最后的cnt就是答案了

上代码

class Solution {
    public int balancedStringSplit(String s) {
        int len = s.length();
        int rcnt=0, lcnt=0, cnt=0;
        for(int i=0; i<len; i++){
            if(s.charAt(i)=='R')
                rcnt++;
            else
                lcnt++;

            if(rcnt==lcnt){
                cnt++;
                rcnt=0;
                lcnt=0;
            }
        }

        return cnt;
    }
}

猜你喜欢

转载自www.cnblogs.com/qiulonghai/p/12344606.html