列表

详情


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' 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int balancedStringSplit(string 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
}

上一题