commit c97ecf064b7843f9abe529b0a6e0638ec103ddd9
parent 39db6fb1c89596bba2efd036de5b4834b0f38642
Author: Jack Sangdahl <jack@pngu.org>
Date: Fri, 6 Feb 2026 21:49:57 -0700
1653. minimum deletions to make string balanced
Diffstat:
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/min_deletions_balance_str.c b/min_deletions_balance_str.c
@@ -10,20 +10,23 @@
*/
int minimumDeletions(char *s) {
- int cnt = 0, ans = 0;
- for (int i = 0; s[i] != '\0'; i++) {
- if (s[i] == 'b') {
+ int cnt = 0, del = 0;
+ while (*s) {
+ if (*s == 'a')
+ del = fmin(++del, cnt);
+ else
cnt++;
- } else if (cnt) {
- ans++;
- cnt--;
- }
+ *s++;
}
- return ans;
+ return del;
}
int main() {
char *s1 = "aababbab", *s2 = "bbaaaaabb";
- printf("%d\n", minimumDeletions(s1)); // expect: 2
- printf("%d\n", minimumDeletions(s2)); // expect: 2
+ int r1 = minimumDeletions(s1);
+ int r2 = minimumDeletions(s2);
+ printf("%d\n", r1); // expect: 2
+ assert(r1 == 2);
+ printf("%d\n", r1); // expect: 2
+ assert(r2 == 2);
}
diff --git a/min_deletions_balance_str.py b/min_deletions_balance_str.py
@@ -15,14 +15,13 @@ class Solution(object):
:type s: str
:rtype: int
"""
- a, b, cnt = s.count("a"), 0, len(s)
- for c in s:
- if c == "b":
- cnt = min(cnt, a + b)
- b += 1
+ cnt, rem = 0, 0
+ for i in s:
+ if i == "a":
+ rem = min(rem + 1, cnt)
else:
- a -= 1
- return min(cnt, b)
+ cnt += 1
+ return rem
if __name__ == "__main__":