Re: [閒聊] 每日leetcode

作者: enmeitiryous (enmeitiryous)   2024-07-30 10:18:55
1653 minimun deletion make string balance
題目:
給你一個只有a,b兩種字母構成的字串s,求最少的deletion數使的新字串中
a一定出現在任一b前面
思路:
用dp的話可以想成假如s的前i項都是a的話那s的minimum deletion會和s[i+1~n]相同
,而假如第i+1項是b則s的min deletion num會是1+mindel(s[i+2~n])。
所以我們可以先統計s中a的數目再遍歷一次s,而min deletion會是過程中遇到的b的
數目和a的數目總合和原定為s長度的ans間的最小值,而在這次遍歷過程中遇到a則將
統計的a數目減少遇到b則增加統計數目
偷看了下答案提到的利用stack的作法可以發現unbalance是發生在"ba"字串出現的時候
如果將b去除掉則可以最小化deletion這樣就只需要遍歷s一遍,可以更快
int minimumDeletions(string s) {
int n=s.size();
int acount=0;
int bcount=0;
int ans=n;
for(int i=0;i<n;++i){
if(s[i]=='a'){
acount++;
}
}
for(int i=0;i<n;++i){
if(s[i]=='a'){
acount

Links booklink

Contact Us: admin [ a t ] ucptt.com