【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;
}
相关推荐
国科安芯16 分钟前
星上计算的第一道防线:低轨遥感卫星载荷处理链中的AS32S601型抗辐射MCU—— 面向高分辨率成像与在轨智能处理的场景化综述
大数据·网络·人工智能·单片机·算法·低轨卫星·抗辐射
chenbingjie_c24 分钟前
C++ 模板进阶:从 “会用“ 到 “懂底层“(非类型参数・特化・分离式编译)
c++·后端
thusloop26 分钟前
零门槛接入 GPT-6-astra 与 claude-opus-5-5,三大场景实战指南
python·gpt·算法·agent·claude·codex
world781122635 分钟前
【C++】set 和 map
java·前端·c++·set·map
瓦瓦gogo41 分钟前
学回溯算法时,我先弄明白了怎么“退回来”
算法
Lzg_na1 小时前
堆和堆排序
算法
TK泰妞1 小时前
TikTok 带货视频如何做多语言本地化?从翻译脚本到重做场景的实用方法
算法·音视频
房开民1 小时前
DDPM 完整原理 + 全套公式串联
算法
lunar_coder1 小时前
哈希扩展 -- 位图思想
c++·算法·哈希算法
秋天的怀念_David1 小时前
听故事学语言 · 数据结构篇 · 序章一 算法之问
数据结构·程序人生·算法