【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;
}
相关推荐
2401_8318249610 分钟前
代码性能剖析工具
开发语言·c++·算法
是wzoi的一名用户啊~23 分钟前
【C++小游戏】2048
开发语言·c++
Sunshine for you1 小时前
C++中的职责链模式实战
开发语言·c++·算法
qq_416018721 小时前
C++中的状态模式
开发语言·c++·算法
2401_884563241 小时前
模板代码生成工具
开发语言·c++·算法
2401_831920742 小时前
C++代码国际化支持
开发语言·c++·算法
m0_672703312 小时前
上机练习第51天
数据结构·c++·算法
ArturiaZ2 小时前
【day60】
算法·深度优先·图论
2401_851272992 小时前
自定义内存检测工具
开发语言·c++·算法
☆5662 小时前
C++中的命令模式
开发语言·c++·算法