一.问题描述

平衡字符串 中,'L' 和 'R' 字符的数量是相同的。

给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足:

每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。

二.设计思路

这道题要求尽可能多的切割平衡字符串

我们通过观察例题以及推理可得,要想得到最多切割,切割处来的字符串必须为先 R后 L 或者先 L后 R 。绝对不能出现 L R 相互交错出现。
也就是说分割时,不能出现嵌套。
贪心策略: 不要有嵌套的平衡,只要达到平衡,就立即分割
故可以定义一个变量 cnt ,在遇到不同的字符时,向不同的方向变化,设 cnt 为 0 时达到平衡,分割数更新。
比如:
从左往右扫描字符串s,遇到 L , cnt + 1,遇到 R ,cnt - 1
当 cnt 为0时即,更新记录平衡字符串子串的变量 ++num

三.流程图

四.伪代码 

1

五.代码实现 

class Solution {
public:
    int balancedStringSplit(string s) {
        int len = s.size();
        int cnt = 0, num = 0;

        for (int i = 0; i < len; ++i)
        {
            // 遇到R,--cnt
            if (s[i] == 'R')
                --cnt;
            // 遇到L,++cnt
            else
                ++cnt;
			// 判断:如果cnt等于0,说明要切割
            if (cnt == 0)
                ++num;
        }

        return num;
    }
};

 

posted on 2023-05-26 18:23  leapss  阅读(16)  评论(0)    收藏  举报