Skip to content

Latest commit

 

History

History
64 lines (51 loc) · 1.65 KB

File metadata and controls

64 lines (51 loc) · 1.65 KB

2609. 最长平衡子字符串

给你一个仅由 01 组成的二进制字符串 s

如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量,则认为 s 的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。

返回 s 中最长的平衡子字符串长度。

子字符串是字符串中的一个连续字符序列。

示例 1:

输入: s = "01000111"
输出: 6
解释: 最长的平衡子字符串是 "000111" ,长度为 6 。

示例 2:

输入: s = "00111"
输出: 4
解释: 最长的平衡子字符串是 "0011" ,长度为  4 。

示例 3:

输入: s = "111"
输出: 0
解释: 除了空子字符串之外不存在其他平衡子字符串,所以答案为 0 。

提示:

  • 1 <= s.length <= 50
  • '0' <= s[i] <= '1'

题解 (Rust)

1. 题解

impl Solution {
    pub fn find_the_longest_balanced_substring(s: String) -> i32 {
        let s = s.as_bytes();
        let mut count0 = (b'1' - s[0]) as i32;
        let mut count1 = 0;
        let mut ret = 0;

        for i in 1..s.len() {
            if s[i] == b'0' && s[i - 1] == b'1' {
                count0 = 0;
                count1 = 0;
            }

            if s[i] == b'0' {
                count0 += 1;
            } else if s[i] == b'1' {
                count1 += 1;
            }

            ret = ret.max(count0.min(count1) * 2);
        }

        ret
    }
}