---
# System prepended metadata

title: Untitled

---

# 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;
    }
    
}

```