❓ 1221. 分割平衡字符串
难度:简单
平衡字符串 中,'L' 和 'R' 字符的数量是相同的。
给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足:
- 每个子字符串都是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。
示例 1:
输入:s = “RLRRLLRLRL”
输出:4
解释:s 可以分割为 “RL”、“RRLL”、“RL”、“RL” ,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。
示例 2:
输入:s = “RLRRRLLRLL”
输出:2
解释:s 可以分割为 “RL”、“RRRLLRLL”,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。
注意,s 无法分割为 “RL”、“RR”、“RL”、“LR”、“LL” 因为第 2 个和第 5 个子字符串不是平衡字符串。
示例 3:
输入:s = “LLLLRRRR”
输出:1
解释:s 只能保持原样 “LLLLRRRR” 。
提示:
- 2 <= s.length <= 1000
s[i] = 'L'或'R's是一个 平衡 字符串
💡思路:贪心
任意平衡字符串内的 R 和 L 数量相等:
- 定义
count记录R的数量,当前字符是R就加1,否则减1; - 当
count = 0时,说明当前的R和L数量相等,数量ans++。
🍁代码:(Java、C++)
Java
class Solution {
public int balancedStringSplit(String s) {
int count = 0, ans = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == 'R') count++;
else count--;
if(count == 0) ans++;
}
return ans;
}
}
C++
class Solution {
public:
int balancedStringSplit(string s) {
int count = 0, ans = 0;
for(char c : s){
if(c == 'R') count++;
else count--;
if(count == 0) ans++;
}
return ans;
}
};
🚀 运行结果:

🕔 复杂度分析:
- 时间复杂度:
O
(
n
)
O(n)
O(n),其中
n为字符串s的长度,我们仅需遍历s一次。 - 空间复杂度: O ( 1 ) O(1) O(1),只需要常数的空间存放若干变量。
题目来源:力扣。
放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!













![指针与数组--动态数组(1)[1、C程序的内存映像 2、动态内存分配]](https://img-blog.csdnimg.cn/0e05dc4cbed148c5a318a531dac42db7.png)





