Week 5 C 平衡字串(尺取法)

2021-10-04 10:13:21 字數 1025 閱讀 7343

問題描述:

乙個長度為n(n是4的倍數)的字串s,其中僅包含』q』,『w』,『e』,'r』四種字元。若四種字元在字串**現次數均為n/4,則其為乙個平衡字串。現可以將s中連續的一段子串替換為相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?若s已經平衡則輸出0。

準備知識:

尺取法:

1.維護兩個指標l,r,一般用在陣列上,相同方向進行掃瞄。

2.適用範圍:所求解答案為乙個連續區間,區間左右端點移動有明確的方向。

3.當[l,r]滿足要求時,l++,以求取更短或者更優的區間解。

4.當[l,r]不滿足要求時,r++,擴大區間範圍以滿足題目要求。

解題思路:

1.字串平衡時,四種字母的數量均為n/4。

2.字串不平衡時,假定要修改的字串落在了當前[l,r],則該區間之的四種字母的個數均小於等於n/4。

3.在2成立的條件下,不斷l++優化當前區間,直到2不滿足,記錄一次答案。然後執行r++,直到2滿足。迴圈執行,遍歷字串一次。

**實現:

#include

#include

using

namespace std;

int sumq,sumw,sume,sumr;

void

add(

char

& c)

void

minus1

(char

& c)

intmain()

int o = s.

size()

/4;if

(sumq==o&&sumw==o&&sumr==o&&sume==o)

else

r++;}

cout<}}

總結:一定要判斷初始字串是否平衡,進入尺取後,結果至少為一。

week5 C 平衡字串(尺取法)

一 題目描述 乙個長度為 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 一行...

week5C 平衡字串

有一串字元,長度為n n為4的倍數 其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。可將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,求替換字串的最小長度。一串字元。字串的最小長度,如果本來就是平衡的,則輸出...