##順帶解決編譯器自身引起的[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 中連續的一段子串替換成相同長度的只包含那四個字元的任意字串,使其變為乙個平衡字串,求替換字串的最小長度。一串字元。字串的最小長度,如果本來就是平衡的,則輸出...