LeetCode 2609. Find the Longest Balanced Substring of a Binary String Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
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

Solution 1: Brute force

Since the range of n is small, we can enumerate all substrings s[i..j] to check if it is a balanced string. If so, update the answer.

The time complexity is O(n3), and the space complexity is O(1). Where n is the length of string s.

PythonJavaC++GoTypeScriptRust
class Solution: def findTheLongestBalancedSubstring(self, s: str) -> int: def check(i, j): cnt = 0 for k in range(i, j + 1): if s[k] == '1': cnt += 1 elif cnt: return False return cnt * 2 == (j - i + 1) n = len(s) ans = 0 for i in range(n): for j in range(i + 1, n): if check(i, j): ans = max(ans, j - i + 1) return ans(code-box)

Solution 2: Enumeration optimization

We use variables zero and one to record the number of continuous 0 and 1.

Traverse the string s, for the current character c:

  • If the current character is '0', we check if one is greater than 0, if so, we reset zero and one to 0, and then add 1 to zero.
  • If the current character is '1', we add 1 to one, and update the answer to ans = max(ans, 2 × min(one, zero)).

After the traversal is complete, we can get the length of the longest balanced substring.

The time complexity is O(n), and the space complexity is O(1). Where n is the length of string s.

PythonJavaC++GoTypeScriptRust
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(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !