当前位置:首页 > 力扣 > 力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

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

4个月前 (05-19)

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1) 字符串 C++ 算法 力扣 贪心算法 双计数器 第1张


题目重解

给定一个仅包含'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; // 返回总平衡子串数
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣第71题:用栈轻松解决Unix路径简化问题

力扣第71题:用栈轻松解决Unix路径简化问题

题目解读:在Unix风格的文件系统中,我们经常需要处理各种复杂的路径表示。给定一个绝对路径字符串,我们需要将其转换为最简化的规范路径。规范路径要求:路径始终以斜杠'/'开头;两个目录名...

力扣5:中心扩散法 轻松破解最长回文子串

力扣5:中心扩散法 轻松破解最长回文子串

题目解读:在一个给定的字符串中,我们需要找到最长的回文子串。回文是指正读反读都相同的字符串,如"aba"、"abba"都是回文。这个问题看似简单,但要在字符串中...

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

题目重解我们面对一个经典背包问题的变体:给定n个物品,每个物品有重量w和价值v,背包容量为V。需要回答两个问题:1) 普通情况下能获得的最大价值;2) 必须恰好装满背包时的最大价值(若无法装满则输出0...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

洛谷P1007士兵过桥问题详解 C++贪心算法实现与优化

洛谷P1007士兵过桥问题详解 C++贪心算法实现与优化

题目解读这道题目描述了一座长度为L的桥上有n个士兵,每个士兵每秒可以向左或向右移动1个单位。当士兵到达桥的端点(0或L+1)时离开桥。要求计算所有士兵离开桥的最小时和最大时间。解题思路最小时计算:每个...

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。