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