乍一看,简单题,思路也很简单,但代码有点不好写
- 思路无非就是从找到的第一个 ‘0’ 开始,一直找 ‘0’ 知道遇到一个 ‘1’,此时变换策略,一直找 ‘1’,知道遇到一个 ‘0’,就这样一直找
- 代码不好写,情况挺多
- 首先 0 比 1 少,如字符串 ”00011111“,那么在遇到下一个 ‘0’ 之前,我们就要记下这个平衡子串了,平衡子串的长度是 2 序列的两倍
- 0 必 1 多,如字符串 ”00000111“,那么平衡子串的长度是 1 序列的两倍
- 在这里我用 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