华为OD机试 - 完美走位(Python)

该文阐述了一个关于字符串处理的问题,要求在给定的WASD字符串中找到最小长度的连续子串进行替换,以达到四个字母出现频率相同的目标,即实现完美走位。通过计算每个字母与平均值的差值来确定需要调整的数量,然后使用深度搜索策略寻找满足条件的子串并更新最小长度。
摘要由CSDN通过智能技术生成
完美走位
题目描述:
输入一个长度为4的倍数的字符串,字符串中仅包含WASD四个字母。
将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换Q,如果替换后整个字符串中WASD四个字母出现的频数相同,那么我们称替换后的字符串是“完美走位”。求子串的最小长度。
如果输入字符串已经平衡则输出0。
二、输入一行字符表示给定的字符串s 
数据范围:
1<=n<=10^5且n是4的倍数,字符串中仅包含WASD四个字母。
三、输出一个整数表示答案
四、样例输入输出示例1:
输入:WASDAASD 
输出:1 
说明:
将第二个A替换为W,即可得到完美走位。
示例2:输入:AAAA 
输出:3 
说明:
将其中三个连续的A替换为WSD,即可得到完美走位
借鉴优化了【完美走位】_笑着的程序员的博客-CSDN博客的思路


minT=1000000
walk=input()
avg=len(walk)/4
w=max(walk.count("W")-avg,0)
s=max(walk.count("S")-avg,0)
a=max(walk.count("A")-avg,0)
d=max(walk.count("D")-avg,0)



def solveP():
    if(w==s==d==a):#完美情况
        return 0

    print(containstr(0,int(w+s+a+d-1),minT))



def containstr(head:int,tail:int,minT:int):
    if(tail> len(walk)):
        return minT#越界即结束
    if(walk[head:tail].count("A")>=a and walk[head:tail].count("S")>=s and walk[head:tail].count("W")>=w and walk[head:tail].count("D")>=d):#我们只需要考虑多余的wasd数量即可
        minT=min(tail-head,minT)#更新minT
        return containstr(head+1,tail,minT)#右边框右滑
    else:
        return containstr(head,tail+1,minT)#左边框右滑

solveP()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值