【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;
}
相关推荐
罗西的思考1 小时前
[2W字长文] 探秘Transformer系列之(23)--- 长度外推
人工智能·算法
算AI20 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
懒羊羊大王&21 小时前
模版进阶(沉淀中)
c++
owde21 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
GalaxyPokemon21 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi21 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
hyshhhh21 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
tadus_zeng1 天前
Windows C++ 排查死锁
c++·windows
EverestVIP1 天前
VS中动态库(外部库)导出与使用
开发语言·c++·windows
杉之1 天前
选择排序笔记
java·算法·排序算法