连续两天的周赛,双周赛都用到了,记录一下。
1653. 使字符串平衡的最少删除次数
给你一个字符串 s ,它仅包含字符 ‘a’ 和 'b’ 。
你可以删除 s 中任意数目的字符,使得 s 平衡 。我们称 s 平衡的 当不存在下标对 (i,j) 满足 i < j 且 s[i] = ‘b’ 同时 s[j]= ‘a’ 。
请你返回使 s 平衡 的 最少 删除次数。
输入:s = "aababbab"
输出:2
解释:你可以选择以下任意一种方案:
下标从 0 开始,删除第 2 和第 6 个字符("aababbab" -> "aaabbb"),
下标从 0 开始,删除第 3 和第 6 个字符("aababbab" -> "aabbbb")。
class Solution {
public:
int minimumDeletions(string s) {
int len = s.size();
vector<int>pre(len,0), suf(len,0);
for(int i = 0; i < len; i++){
if(i > 0) pre[i] = pre[i-1];
pre[i] += s[i] =='b';
}
for(int i = len-1; i>=0; i--){
if(i < len-1) suf[i] = suf[i+1]