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

给定一个包含'Q','W','E','R'字符的字符串,目标是通过替换一个子串使其变为平衡字符串,即每个字符出现相同次数。输入是一个长度为4的倍数的字符串,输出是最小替换子串的长度。例如,输入'WQWRQQQW',通过替换'QQW'可以达到平衡,输出为3。
摘要由CSDN通过智能技术生成

平衡字符串

【问题描述】

有⼀个只含有 ‘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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值