程式設計思維 week5 作業C 平衡字串

2021-10-04 13:15:18 字數 1094 閱讀 7603

乙個長度為 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 一行字元表...