一.问题描述
平衡字符串 中,'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;
}
};
标签:cnt,++,32,每日,int,num,字符串,打卡,平衡 From: https://www.cnblogs.com/leapssisbird/p/17435540.html