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

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

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



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣119题:从O(n²)到O(2n):杨辉三角高效空间优化

力扣119题:从O(n²)到O(2n):杨辉三角高效空间优化

题目重解:给定一个非负索引 rowIndex,返回杨辉三角的第 rowIndex 行。不同于生成整个杨辉三角,这道题要求我们只返回特定行,且空间复杂度应尽可能优化。例如输入3,需要返回[1,3,3,1...

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

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

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

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

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

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

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

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

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

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

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

内容简介本文详细解析了力扣第44题"寻找两个正序数组的中位数"的合并排序解法。通过双指针技术合并两个有序数组,然后直接计算合并后数组的中位数。虽然时间复杂度为O(m+n),但这种方...

发表评论

访客

看不清,换一张

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