2609. 最长平衡子字符串 --力扣 --JAVA

题目

给你一个仅由 0 和 1 组成的二进制字符串 s 。  

如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量,则认为 s 的这个子字符串是平衡子字符串。请注意,空子字符串也视作平衡子字符串。 

返回  s 中最长的平衡子字符串长度。

子字符串是字符串中的一个连续字符序列。

解题思路

  1. 创建变量记录0和1出现的次数;
  2. 分情况讨论
    1. 当前字符为0
      1. 前面是否出现过1;
      2. 出现过则重新记录;
      3. 未出现则累计记录;
    2. 当前字符为1:
      1. 前面是否存在0;
      2. 不存在则跳过;
      3. 存在则累加;

代码展示

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

你可能感兴趣的:(力扣练习,算法,数据结构)