乙個長度為 n 的字串 s,其中僅包含 『q』, 『w』, 『e』, 『r』 四種字元。
如果四種字元在字串**現次數均為 n/4,則其為乙個平衡字串。
現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?
如果 s 已經平衡則輸出0。
一行字元表示給定的字串s。
1<=n<=10^5。
n是4的倍數。
字串中僅包含字元 『q』, 『w』, 『e』 和 『r』。
乙個整數表示答案。
qqwe
1
由於所求答案為乙個連續區間且區間左右端點有明確移動方向,故可以採用尺取法。
當選中區間在範圍內,即 r時,迴圈。
假定已選中區間[l,r]:
則free >=0且為4的倍數時,滿足要求;否則不滿足。
若滿足要求,則l++,同時比較此時所得區間長度與之前所得區間長度的最小值,更新ans=min(ans,r-l+1);否則r++。
#include
#include
#include
using
namespace std;
char c[
100005];
map<
char
,int
> sum;
intmain()
if(sum[
'q']
==sum[
'w']
&&sum[
'w']
==sum[
'e']
&&sum[
'e']
==sum[
'r']
)int l=
0,r=
0,ans=n;
sum[c[0]
]--;while
(relse
}printf
("%d"
,ans)
;return0;
}
第一次用map,感覺十分快樂。
題目鏈結
WEEK5 作業 C 平衡字串
乙個長度為 n 的字串 s,其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。一行字元表示給定的字串s 乙...
week5 作業 C 平衡字串
乙個長度為 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 一行字元表...