C 平衡字串(C map

2021-10-04 07:40:13 字數 2366 閱讀 1753

##順帶解決編譯器自身引起的[error]no matching for call to…

input

qwer

output

0

input

qqwe

output

1input

qqqw

output

2input

qqqq

output

3

1<=n<=10^5

n是4的倍數

字串中僅包含字元 『q』, 『w』, 『e』 和 『r』.

這道題在dev上執行前,你依然需要準備一下dev,因為它不支援c++11的語法,emmm,再來一遍它的操作,

直接執行我的這段**會出現:

自從這種錯誤出多了,我就條件反射地去改它的編譯器程式設定了,23333

把我圈紅的地方對照著改一波

解:本題採取了尺取的方法,需要注意的是連續區間長度始終是4的倍數,這樣

簡化了很多,(感覺

然後根據特定的區間內去計算每個元素的個數,保證每個元素的值是n/

4個然後我又去系統學習了一下map,這裡不詳寫map,我會在筆記裡詳細記錄

關於尺取法,這篇部落格的例題可以參考一波,我把這道經典的例題記錄下來吧,它差不多就是乙個寫尺取的模板了。

參考:尺取法經典例題

↓這個是尺取模板,解決平衡字串的**還在後面哦

#include

#include

#include

#define max 100005

#define ll long long

#define inf 0x3f3f3f3f

using

namespace std;

ll a[

100010];

int n, t, ans = inf;

ll sum, s;

intmain()

if(ans == inf) ans =0;

printf

("%d\n"

, ans);}

return0;

}

不知不覺就說了這麼多話,直接看**吧!

#include

#include

#include

#include

using

namespace std;

map<

char

,int

>mp(

,,,}

);const

int maxn=2*

1e5+10;

char str[maxn]

;int sum[4]

;int

main()

}while

(lr++;}

if(ans==maxn)

printf

("0\n");

else

printf

("%d\n"

,ans)

;return0;

}

還有乙個問題我必須要說一下,這個明明是c++,但是每次都得用scanf或者printf,不然它就會超時,真煩,怎麼解決這個問題呢?我去查了查,還真有

std::ios::

sync_with_stdio

(false

);

因為在使用cout 和cin的時候,它會有乙個和c語言的scanf和printf同步的乙個過程,這個過程會導致c++輸入輸出有乙個緩衝時間,加上那句話後,就可以安心使用cin和cout啦!

#include

using

namespace std;

//如果沒有這句,就用上面那句,有就可以不加std::

intmain()

分割平衡字串

在乙個 平衡字串 中,l 和 r 字元的數量是相同的。給出乙個平衡字串 s,請你將它分割成盡可能多的平衡字串。返回可以通過分割得到的平衡字串的最大數量 示例 1 輸入 s rlrrllrlrl 輸出 4 解釋 s 可以分割為 rl rrll rl rl 每個子字串中都包含相同 數量的 l 和 r 示...

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

乙個長度為 n 的字串 s,其中僅包含 q w e r 四種字元。如果四種字元在字串 現次數均為 n 4,則其為乙個平衡字串。現可以將 s 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,問替換子串的最小長度?如果 s 已經平衡則輸出0。一行字元表示給定的字串s 乙...

week5C 平衡字串

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