每日一题 2609. 最长平衡子字符串(简单)

每日一题 2609. 最长平衡子字符串(简单)_第1张图片
乍一看,简单题,思路也很简单,但代码有点不好写

  1. 思路无非就是从找到的第一个 ‘0’ 开始,一直找 ‘0’ 知道遇到一个 ‘1’,此时变换策略,一直找 ‘1’,知道遇到一个 ‘0’,就这样一直找
  2. 代码不好写,情况挺多
  3. 首先 0 比 1 少,如字符串 ”00011111“,那么在遇到下一个 ‘0’ 之前,我们就要记下这个平衡子串了,平衡子串的长度是 2 序列的两倍
  4. 0 必 1 多,如字符串 ”00000111“,那么平衡子串的长度是 1 序列的两倍
  5. 在这里我用 cnt 计数,遇到 0 就 +1,遇到 1 就 -1,那么就需要另一个参数来记录转折时的 cnt 值,不然无法计算平衡子串长度
class Solution:
    def findTheLongestBalancedSubstring(self, s: str) -> int:
        ans = 0
        cnt = 0
        k = 0
        t = '0'
        for i in s:
            if i == '0':
                if t == '0':
                    cnt += 1
                else:
                    ans = max(ans, (k-cnt)*2)
                    cnt = 1
                    t = '0'
            else:
                if t == '0':
                    k = cnt
                    t = '1'
                cnt -= 1
                if cnt < 0:
                    cnt = 0
                if cnt == 0:
                    ans = max(ans, k*2)
        if t == '1':
            ans = max(ans, (k-cnt)*2)
        return ans

你可能感兴趣的:(用Python刷力扣,算法,python,leetcode)