【3.7】贪心算法-解分割平衡字符串

一、题目

在一个 平衡字符串 中, 'L'和'R'字符的数量是相同的 。给你一个平衡字符串s,请你将它分割成尽可能多的平衡字符串。
注意:分割得到的每个字符串都必须是平衡字符串。返回可以通过分割得到的平衡字符 串的 最大数量 。

示例 1:

输入:s = "RLRRL LRLRL "

输出:4

解释:s 可以分割为 "RL "、"RRL L "、"RL "、"RL " ,每个子字符串中都包含相同数量的

' L ' 和 'R' 。

示例 2:

输入:s = "RL L L LRRRLR"

输出:3

解释: s 可 以 分 割 为 "RL " 、 " L L LRRR" 、 " LR" , 每 个 子 字 符 串 中 都 包 含 相 同 数 量 的 ' L '

和 'R' 。

示例 3:

输入:s = " L L L LRRRR"

输出:1

解释:s 只能保持原样 " L L L LRRRR".

示例 4:

输入:s = "RLRRRL LRL L "

输出:2

解 释 : s 可 以 分 割 为 "RL " 、 "RRRL LRL L " , 每 个 子 字 符 串 中 都 包 含 相 同 数 量 的 ' L ' 和

'R' 。

提示:

1)1 <= s.length <= 1000

2)s [i] = ' L ' 或 'R'

3)s 是一个平衡字符串

二、解题思路

平衡字符串的定义是字符串中L和R的数量相等。题目明确指出字符串s仅包含L和R两种字符。因此,一种直接的解题方法是使用两个计数器分别统计L和R的出现次数。每当这两个计数器相等时,就意味着我们发现了一个平衡字符串。我们需要记录这些相等的次数,即平衡字符串的数量。

以示例1为例,对于输入字符串 "RLRRLLRLRL",执行思路如下:

  • 初始状态:count = 0, left = 0, right = 0

  • 遍历字符串 "RLRRLLRLRL":

    • 'R':left = 0, right = 1

    • 'L':left = 1, right = 1(平衡,count = 1

    • 'R':left = 1, right = 2

    • 'R':left = 1, right = 3

    • 'L':left = 2, right = 3

    • 'L':left = 3, right = 3(平衡,count = 2

    • 'R':left = 3, right = 4

    • 'L':left = 4, right = 4(平衡,count = 3

    • 'R':left = 4, right = 5

    • 'L':left = 5, right = 5(平衡,count = 4

最终,count的值为4,即平衡字符串的数量为4。

三、代码实现

cpp 复制代码
#include <iostream>
#include <string>

int balancedStringSplit(const std::string& s) {
    int count = 0; // 平衡字符串的数量
    int left = 0; // 字符L的数量
    int right = 0; // 字符R的数量
    for (char ch : s) {
        // 统计L和R的数量
        if (ch == 'L') {
            left++;
        } else {
            right++;
        }
        // 如果L和R的数量相等,说明截取的子串是平衡字符串
        if (left == right) {
            count++;
        }
    }
    return count;
}

int main() {
    std::string s = "RLRRLLRLRL";
    int result = balancedStringSplit(s);
    std::cout << "Number of balanced string splits: " << result << std::endl;
    return 0;
}
相关推荐
int型码农9 分钟前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
利刃大大15 分钟前
【在线五子棋对战】二、websocket && 服务器搭建
服务器·c++·websocket·网络协议·项目
UFIT22 分钟前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面23 分钟前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked9326 分钟前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,32 分钟前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵1 小时前
有效的括号题解
数据结构·算法·
GIS小天1 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
_Itachi__1 小时前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
不忘不弃1 小时前
计算矩阵A和B的乘积
线性代数·算法·矩阵