字符串(简单)"/>
每日一题 2609. 最长平衡子字符串(简单)
乍一看,简单题,思路也很简单,但代码有点不好写
- 思路无非就是从找到的第一个 ‘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 = 0cnt = 0k = 0t = '0'for i in s:if i == '0':if t == '0':cnt += 1else:ans = max(ans, (k-cnt)*2)cnt = 1t = '0'else:if t == '0':k = cntt = '1'cnt -= 1if cnt < 0:cnt = 0if cnt == 0:ans = max(ans, k*2)if t == '1':ans = max(ans, (k-cnt)*2)return ans
更多推荐
每日一题 2609. 最长平衡子字符串(简单)
发布评论