继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

慕慕7135311
关注TA
已关注
手记 51
粉丝 1
获赞 11

https://img1.sycdn.imooc.com/6d3691680835559b18940829.jpg


题目重解

给定一个仅包含'L'和'R'的字符串,要求将其分割成尽可能多的子串,且每个子串中'L'和'R'的数量相等。例如输入"RLRRLLRLRL",可以分割为"RL"、"RRLL"、"RL"、"RL"四个平衡子串。

解题思路

这段代码采用了贪心算法双计数器策略:

1.使用Lsum和Rsum分别统计当前遍历过程中'L'和'R'的数量

2.每当两个计数器相等时,说明找到一个平衡子串

3.计数器归零后继续寻找下一个平衡子串

4.最终返回找到的平衡子串总数

时间复杂度为O(n),空间复杂度为O(1),解决此类问题的最优方案。

代码解析

class Solution {public:
    int balancedStringSplit(string s) {
        int Lsum = 0, Rsum = 0; // 'L'和'R'的计数器
        int cnt = 0; // 平衡子串计数器
        
        for (int i = 0; i < s.size(); i++) {
            s[i] == 'L' ? Lsum++ : Rsum++; // 根据字符类型增加对应计数器
            
            if (Lsum == Rsum) // 发现平衡子串
                cnt++; // 平衡子串数+1
        }
        return cnt; // 返回总平衡子串数
    }};


力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP