完美走位
题目描述:
输入一个长度为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()