乙個長度為 n 的字串 s,其中僅包含 『q』, 『w』, 『e』, 『r』 四種字元。如果四種字元在字串**現次數均為 n/4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。
一行字元表示給定的字串s
乙個整數表示答案
input
qwer
output
0input
qqwe
output
1input
qqqw
output
2input
qqqq
output
31<=n<=10^5。n是4的倍數字串中僅包含字元 『q』, 『w』, 『e』 和 『r』。
我們先了解一下尺取法。
• 尺取法,又稱雙指標法,是陣列上的一種常見操作,在遍歷陣列過程中,用兩個相同方向進行掃瞄
• 什麼情況下能使用尺取法?
所求解答案為乙個連續區間; 區間左右端點移動有明確方向。
上述題目是可以使用尺取法的。
區間左右端點移動有明確方向 ✓
• 當前 [l, r] 滿足要求,則 l++
• 當前 [l, r] 不滿足要求,則 r++
• 用 sum1, sum2, sum3, sum4 分別記錄不包含區間 [l, r] 這一段時,字元 『q』, 『w』, 『e』, 『r』 的個數
• 先通過替換使 4 類字元數量一致,再判斷剩餘空閒位置是為 4 的倍數
• max = max(sum1, sum2, sum3, sum4)
• total = r – l + 1 • free = total -[(max-sum1)+(max-sum2)+(max-sum3)+(max-sum4)]
• 若 free ≥ 0 且為 4 的倍數,則滿足要求;否則不滿足
參考**如下:
#include
#include
char a[
100010];
intmain()
t=n/4;
if(w==t && q==t && e==t)
printf
("0");
else
}else}}
printf
("%d"
,ans);}
return0;
}
平衡字串 尺取法
乙個長度為 n 的字串 s,其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。input 一行字元表示給定...
week5 尺取法 平衡字串
title 乙個長度為 n 的字串 s,其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。input 一行...
week5 C 平衡字串(尺取法)
一 題目描述 乙個長度為 n 的字串 s,其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。input 一...