题目链接:Leetcode 1653. 使字符串平衡的最少删除次数
题意:
给你一个字符串 s ,它仅包含字符 'a' 和 'b' 。
你可以删除 s 中任意数目的字符,使得 s 平衡 。我们称 s 平衡的 当不存在下标对 (i,j) 满足 i < j 且 s[i] = 'b' 同时 s[j]= 'a' 。
请你返回使 s 平衡 的 最少 删除次数。
解题思路:
从左向右,a如果在左边,不用删除,b 如果在右边不用删除
class Solution {
public:
int minimumDeletions(string s) {
int n = s.size();
int ans = 0, res = 0;
int left = 0;
for(left = 0; left < n; left++) { // 左边一直是a
if(s[left] != 'a') {
break;
}
}
for(int i = left; i <= n; i++) {
if(s[i] == 'a') { // 出现a的个数
ans++;
} else { // 开始出现b的个数
res++;
}
if(ans > res) { // 如果要删除的a的个数大于删除b的个数,那么删除b
ans = res;
}
}
return min(ans, res); // a 和 b 哪个少删除哪个
}
};
本文介绍了LeetCode第1653题的解决方案,题目要求找到使字符串仅包含'a'和'b'的情况下,达到平衡状态的最小删除次数。平衡状态定义为不存在'i'在'j'之前且's[i]'为'b'而's[j]'为'a'。解题思路是从左到右遍历,记录'a'和'b'的数量,根据条件更新删除次数。最后返回'a'和'b'中需要删除较少的那个次数。
2758

被折叠的 条评论
为什么被折叠?



