1653. 使字符串平衡的最少删除次数
动态规划:
// 1. 如果当前是b则不考虑删除,并且统计b的个数
// 2. 如果当前是是a则考虑删除,(查看需要删除的b的数量多),还是n-1个删除总数+1 (前n-1个需要删除的最小数-前n-1的状态)的删除的数量多。
class Solution {
public:
int minimumDeletions(string s) {
// 动态规划
// 1. 如果当前是b则不考虑删除,并且统计b的个数
// 2. 如果当前是是a则考虑删除,(查看需要删除的b的数量多),还是n-1个删除总数+1 ,的删除的数量多
int ant = 0;
int countb = 0;
for(auto& c:s){
if(c == 'a'){
ant = min(ant+1,countb);
}else{
++countb;
}
}
return ant;
}
};
//枚举
// 先找出a的总数
// 从第一个开始遍历,要找删除的最小数,那么只需要删除标记点左边的b+右边的a的总数的最小数即可
// 枚举
// 先找出a的总数
// 从第一个开始遍历,要找删除的最小数,那么只需要删除标记点左边的b+右边的a的总数的最小数即可
int righta = 0;
int leftb = 0;
for(auto &c:s){
if(c == 'a'){
righta++;
}
}
if(s.size()<=1||righta==s.size()||righta == 0){
return 0;
}
int mind = s.size();
for(int i=0;i<s.size();i++){
mind = min(mind,righta+leftb);
if(s[i] == 'a'){
--righta;
}else{
++leftb;
}
mind = min(mind,righta+leftb);
}
return mind;
}