平衡字符串-滑动窗口-python题解

平衡字符串

【问题描述】

有⼀个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且⻓度为 n 的字符串。假如在该字符串中,这四个字符都恰好 出现 n/4 次,那么它就是⼀个「平衡字符串」。给你⼀个这样的字符串 s,请通过「替换⼀个⼦串」的 ⽅式,使原字符串 s 变成⼀个「平衡字符串」。

【输入形式】

一个长度为4整数倍的字符串
【输出形式】

待替换⼦串的最⼩可能⻓度

【样例输入】

WQWRQQQW

【样例输出】

3
【样例说明】

替换QQW就可以达到平衡

s=list(input())
n=len(s)
m=n//4
dic=dict()
dic.setdefault('Q',0)
dic.setdefault('E',0)
dic.setdefault('W',0)
dic.setdefault('R',0)
for i in s:
    dic[i]+=1
if dic['Q']==m and dic['W']==m and dic['E']==m and dic['R']==m:
    print(0)

w=n#初始化滑动窗口大小,把需要替换的困在一个窗口内,不需要替换的在窗口外。
l=0

for r in range(n):
    dic[s[r]]-=1
    while l<=r and dic['Q']<=m and dic['W']<=m and dic['E']<=m and dic['R']<=m:
        w=min(w,r-l+1)
        dic[s[l]]+=1
        l+=1

print(w)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值