用于平衡方向字符串的程序,以便每个方向在 Python 中出现四分之一次
假设我们有一个字符串s,它有四个方向“N”、“S”、“W”和“E”,分别代表北、南、西和东。我们必须找到可以更新的最短子串的大小,使得四个方向中的每一个都出现n/4次,其中n是字符串s的大小。
所以,如果输入像s="NNSWWESN",那么输出将是1,这里n是8,所以8/4是2,所以如果我们把最后的N改成E,那么所有方向都会出现两次。
示例
让我们看看以下实现以获得更好的理解-
from collections import Counter
def solve(s):
n = len(s)
if not n:
return 0
quarter = n //4
count = Counter(s)
target = dict()
for (dir, cnt) in count.items():
if cnt > quarter:
target[dir] = quarter - cnt
if not target:
return 0
left, min_len = 0, float("inf")
for right, dir in enumerate(s):
if dir in target:
target[dir] += 1
while min(target.values()) >= 0:
min_len = min(min_len, right - left + 1)
if s[left] in target:
target[s[left]] -= 1
left += 1
return min_len
s = "NNSWWESN"
print(solve(s))输入
"NNSWWESN"输出结果
1
热门推荐
10 医院探望朋友祝福语简短
11 毕业祝福语简短女朋友
12 春节虎年爸妈祝福语简短
13 儿童毕业祝福语 简短6
14 开工仪式横幅祝福语简短
15 孩子日常祝福语大全简短
16 清晨寄语诗句祝福语简短
17 结婚送亲认亲祝福语简短
18 虎年喝酒拜年祝福语简短