❓ 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),只需要常数的空间存放若干变量。
题目来源:力扣。文章来源:https://www.toymoban.com/news/detail-514134.html
放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!文章来源地址https://www.toymoban.com/news/detail-514134.html
注: 如有不足,欢迎指正!
到了这里,关于(贪心) 1221. 分割平衡字符串 ——【Leetcode每日一题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!