# 2609. 最长平衡子字符串 [String] 给你一个仅由 0 和 1 组成的二进制字符串 s 。 如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量,则认为 s 的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。 返回 s 中最长的平衡子字符串长度。 子字符串是字符串中的一个连续字符序列。 示例 1: ``` 输入:s = "01000111" 输出:6 解释:最长的平衡子字符串是 "000111" ,长度为 6 。 ``` 示例 2: ``` 输入:s = "00111" 输出:4 解释:最长的平衡子字符串是 "0011" ,长度为 4 。 ``` 示例 3: ``` 输入:s = "111" 输出:0 解释:除了空子字符串之外不存在其他平衡子字符串,所以答案为 0 。 ``` 題解思路: 使用變量idx遍歷s,在每輪處理中,按照下面3流程進行: 1. 使用變數a統計遇到0的次數,使用變數b統計遇到1的次數(這樣的順序滿足所有0在1前面) 2. 在每一輪統計過後,做一個a,b 進行最小值的操作,乘以2做為平橫子字串的長度,用於更新答案。(滿足字串中0跟1的數目相同) 3. 從當前輪的結束位置idx,再進行下一輪操作,直到s處理完成。 ```java= class Solution { public int findTheLongestBalancedSubstring(String s) { int n = s.length(), idx = 0, ans = 0; while(idx<n){ int a = 0, b = 0; while(idx<n && s.charAt(idx) == '0' && ++a >=0) idx++; while(idx<n && s.charAt(idx) == '1' && ++b >=0) idx++; ans = Math.max(ans, Math.min(a, b) *2); } return ans; } } ```