class Solution {
public:
int balancedStringSplit(string s) {
}
};
1221. 分割平衡字符串
在一个 平衡字符串 中,'L'
和 'R'
字符的数量是相同的。
给你一个平衡字符串 s
,请你将它分割成尽可能多的平衡字符串。
注意:分割得到的每个字符串都必须是平衡字符串,且分割得到的平衡字符串是原平衡字符串的连续子串。
返回可以通过分割得到的平衡字符串的 最大数量 。
示例 1:
输入:s = "RLRRLLRLRL" 输出:4 解释:s 可以分割为 "RL"、"RRLL"、"RL"、"RL" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。
示例 2:
输入:s = "RLLLLRRRLR" 输出:3 解释:s 可以分割为 "RL"、"LLLRRR"、"LR" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。
示例 3:
输入:s = "LLLLRRRR" 输出:1 解释:s 只能保持原样 "LLLLRRRR".
示例 4:
输入:s = "RLRRRLLRLL" 输出:2 解释:s 可以分割为 "RL"、"RRRLLRLL" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。
提示:
1 <= s.length <= 1000
s[i] = 'L' 或 'R'
s
是一个 平衡 字符串原站题解
rust 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-09-12 18:02:40
/* impl Solution { pub fn balanced_string_split(s: String) -> i32 { let mut count = 0i32; let mut l_flag = 0i32; let mut r_flag = 0i32; for c in s.chars() { match c { 'L' => l_flag += 1, 'R' => r_flag += 1, _ => return -1, } if l_flag == r_flag { count += 1; l_flag = 0; r_flag = 0; } } (count) } } */ impl Solution { pub fn balanced_string_split(s: String) -> i32 { let mut stack = Vec::new(); let mut count = 0; for ch in s.chars() { if !stack.is_empty() && *stack.last().unwrap() != ch { stack.pop(); if stack.is_empty() { count += 1; } } else { stack.push(ch); } } count } }
rust 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-09-12 18:02:03
impl Solution { pub fn balanced_string_split(s: String) -> i32 { s .chars() .scan(0,|acc,e| { *acc = match e{ 'R'=>(*acc+1), 'L'=>(*acc-1), _=>(*acc) }; Some(*acc) }) .filter(|e| *e==0) .count() as i32 } }
javascript 解法, 执行用时: 64 ms, 内存消耗: 40.9 MB, 提交时间: 2023-09-12 18:01:37
/** * @param {string} s * @return {number} */ var balancedStringSplit = function(s) { let ans = 0, d = 0; for (let i = 0; i < s.length; ++i) { const ch = s[i]; if (ch === 'L') { ++d; } else { --d; } if (d === 0) { ++ans; } } return ans; };
java 解法, 执行用时: 0 ms, 内存消耗: 39.2 MB, 提交时间: 2023-09-12 18:01:12
class Solution { public int balancedStringSplit(String s) { int ans = 0, d = 0; for (int i = 0; i < s.length(); ++i) { char ch = s.charAt(i); if (ch == 'L') { ++d; } else { --d; } if (d == 0) { ++ans; } } return ans; } }
python3 解法, 执行用时: 44 ms, 内存消耗: 15.9 MB, 提交时间: 2023-09-12 17:59:57
class Solution: def balancedStringSplit(self, s: str) -> int: ans, temp, n = 0, 0, len(s) for i in range(n): temp += 1 if s[i] == 'R' else -1 if temp == 0: ans += 1 return ans
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2021-06-09 15:20:53
func balancedStringSplit(s string) int { ans, temp := 0, 0 for i := 0; i < len(s); i++ { if s[i] == 'R' { temp++ } else { temp-- } if temp == 0 { ans++ } } return ans }