平衡字串(替換字串,尺取法)

2021-10-23 02:43:15 字數 1370 閱讀 7260

乙個長度為 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 一...