# 2609. Find the Longest Balanced Substring of a Binary String

## Description

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'

## Solutions

• class Solution {
public int findTheLongestBalancedSubstring(String s) {
int zero = 0, one = 0;
int ans = 0, n = s.length();
for (int i = 0; i < n; ++i) {
if (s.charAt(i) == '0') {
if (one > 0) {
zero = 0;
one = 0;
}
++zero;
} else {
ans = Math.max(ans, 2 * Math.min(zero, ++one));
}
}
return ans;
}
}

• class Solution {
public:
int findTheLongestBalancedSubstring(string s) {
int zero = 0, one = 0;
int ans = 0;
for (char& c : s) {
if (c == '0') {
if (one > 0) {
zero = 0;
one = 0;
}
++zero;
} else {
ans = max(ans, 2 * min(zero, ++one));
}
}
return ans;
}
};

• class Solution:
def findTheLongestBalancedSubstring(self, s: str) -> int:
ans = zero = one = 0
for c in s:
if c == '0':
if one:
zero = one = 0
zero += 1
else:
one += 1
ans = max(ans, 2 * min(one, zero))
return ans


• func findTheLongestBalancedSubstring(s string) (ans int) {
zero, one := 0, 0
for _, c := range s {
if c == '0' {
if one > 0 {
zero, one = 0, 0
}
zero++
} else {
one++
ans = max(ans, 2*min(zero, one))
}
}
return
}

func max(a, b int) int {
if a > b {
return a
}
return b
}

func min(a, b int) int {
if a < b {
return a
}
return b
}

• function findTheLongestBalancedSubstring(s: string): number {
let zero = 0;
let one = 0;
let ans = 0;
for (const c of s) {
if (c === '0') {
if (one > 0) {
zero = 0;
one = 0;
}
++zero;
} else {
ans = Math.max(ans, 2 * Math.min(zero, ++one));
}
}
return ans;
}


• impl Solution {
pub fn find_the_longest_balanced_substring(s: String) -> i32 {
let mut zero = 0;
let mut one = 0;
let mut ans = 0;

for &c in s.as_bytes().iter() {
if c == b'0' {
if one > 0 {
zero = 0;
one = 0;
}
zero += 1;
} else {
one += 1;
ans = std::cmp::max(ans, std::cmp::min(zero, one) * 2)
}
}

ans
}
}