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

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

1周前 (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; // 返回总平衡子串数
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣912排序题终极解法:递归分割 + 双指针合并详解

力扣912排序题终极解法:递归分割 + 双指针合并详解

题目解读给定一个整数数组,要求将其按升序排列并返回。题目通常隐含对算法时间复杂度的要求,理想情况下需实现 O(n log n) 的时间复杂度。本题看似简单,但需要选择合适的排序算法(如归并排序、快速排...

力扣第92题:三步定位 精准反转链表指定区间

力扣第92题:三步定位 精准反转链表指定区间

题目解读给定一个单链表和两个整数left与right,要求将链表中从第left个节点到第right个节点的部分进行反转,而保持其他部分不变。例如,对于链表1→2→3→4→5,left=2,right=...

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

题目解读给定一个整数数组,我们需要找到一个中心索引,使得该索引左侧所有元素的和等于右侧所有元素的和。如果不存在这样的索引,则返回-1。中心索引的定义不包含在左右两侧的和计算中。这个问题考察对数组遍历和...

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

题目解读‌我们面对的是一个典型的图论问题:给定一个城市的连接矩阵,需要计算其中相互连通的城市群(省份)数量。这个问题可以抽象为无向图中的连通分量计算,每个城市代表图中的一个节点,城市之间的连接关系代表...

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

题目解读给定一个不含重复元素的整数数组,我们需要构建一棵最大二叉树。构建规则是:数组中的最大值作为根节点,其左侧子数组构建左子树,右侧子数组构建右子树,然后递归地应用这个规则。这种构建方式体现了分治思...

发表评论

访客

看不清,换一张

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