https://leetcode.cn/problems/find-the-longest-balanced-substring-of-a-binary-string/description/
给你一个仅由
0和1组成的二进制字符串s。如果子字符串中 所有的
0都在1之前 且其中0的数量等于1的数量,则认为s的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。返回
s中最长的平衡子字符串长度。子字符串是字符串中的一个连续字符序列。
示例 1:
1
2
3 输入:s = "01000111"
输出:6
解释:最长的平衡子字符串是 "000111" ,长度为 6 。示例 2:
1
2
3 输入:s = "00111"
输出:4
解释:最长的平衡子字符串是 "0011" ,长度为 4 。示例 3:
1
2
3 输入:s = "111"
输出:0
解释:除了空子字符串之外不存在其他平衡子字符串,所以答案为 0 。提示:
1 <= s.length <= 50'0' <= s[i] <= '1'
直接模拟一下即可:
- 当字符为 0 时
- 如果之前出现过 1 ,统计平衡子字符串长度,重置 0 和 1 的计数。
- 不论是否重置过,0 的计数始终 +1.
- 当字符为 1 时
- 如果 0 的计数为 0 则不对 1 进行计数
- 字符串遍历之后,如果 0 的计数非零则再次统计平衡子字符串长度。
1 | class Solution { |