题目 #
You are given a binary string s consisting only of zeroes and ones.
A substring of s is considered balanced if all zeroes are before ones and the number of zeroes is equal to the number of ones inside the substring. Notice that the empty substring is considered a balanced substring.
Return the length of the longest balanced substring of s.
A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s = "01000111"
Output: 6
Explanation: The longest balanced substring is "000111", which has length 6.
Example 2:
Input: s = "00111"
Output: 4
Explanation: The longest balanced substring is "0011", which has length 4.
Example 3:
Input: s = "111"
Output: 0
Explanation: There is no balanced substring except the empty substring, so the answer is 0.
Constraints:
- 1 <= s.length <= 50
- ‘0’ <= s[i] <= ‘1’
思路1 #
分析 #
- 遍历一遍,对每一组01进行统计,在1到0的时候更新最大值
代码 #
1func max(a, b int) int {
2 if a < b {
3 return b
4 }
5 return a
6}
7
8func min(a, b int) int {
9 if a > b {
10 return b
11 }
12 return a
13}
14
15func findTheLongestBalancedSubstring(s string) int {
16 res := 0
17 pre, cnt := 0, 0 // pre为0的数量,cnt为当前字符连续的数量
18 n := len(s)
19 for i, v := range s {
20 cnt++
21 if i == n-1 || byte(v) != s[i+1] {
22 if v == '0' {
23 // 0到1变化,pre等于cnt
24 pre = cnt
25 } else {
26 // 1到0变化,判断是否可以更新res
27 res = max(res, min(pre, cnt)*2)
28 }
29 // 变化重新统计
30 cnt = 0
31 }
32 }
33 return res
34}