|
| 1 | +# [Problem 1653: Minimum Deletions to Make String Balanced](https://leetcode.com/problems/minimum-deletions-to-make-string-balanced/description/?envType=daily-question) |
| 2 | + |
| 3 | +## Initial thoughts (stream-of-consciousness) |
| 4 | +- This doesn't seem so bad-- I think we can solve it in $O(n)$ time (where $n$ is the length of the string) |
| 5 | +- Let's keep track of the number of `b`s strictly to the left of index `i`, and the number of `a`s strictly to the right of index `i`. We can fill these in iteratively (the `b`s are filled in using a forward pass through `s` and the `a`s are filled in using a backward pass). |
| 6 | +- Then we can initialize the number of moves to `float('inf')`. Now, loop through each index (`i`) in `s` again, and see if `left_bs[i] + right_as[i] < min_moves`. |
| 7 | + |
| 8 | +## Refining the problem, round 2 thoughts |
| 9 | +- Let's just go with this...I can't think of any edge cases that will affect how we solve this |
| 10 | + |
| 11 | +## Attempted solution(s) |
| 12 | +```python |
| 13 | +class Solution: |
| 14 | + def minimumDeletions(self, s: str) -> int: |
| 15 | + left_bs = [0] * len(s) |
| 16 | + right_as = left_bs.copy() |
| 17 | + |
| 18 | + b_count = int(s[0] == 'b') |
| 19 | + for i in range(1, len(s)): |
| 20 | + left_bs[i] = b_count |
| 21 | + if s[i] == 'b': |
| 22 | + b_count += 1 |
| 23 | + |
| 24 | + a_count = int(s[-1] == 'a') |
| 25 | + for i in range(len(s) - 2, -1, -1): |
| 26 | + right_as[i] = a_count |
| 27 | + if s[i] == 'a': |
| 28 | + a_count += 1 |
| 29 | + |
| 30 | + min_moves = float('inf') |
| 31 | + for i in range(len(s)): |
| 32 | + min_moves = min(min_moves, left_bs[i] + right_as[i]) |
| 33 | + |
| 34 | + return min_moves |
| 35 | +``` |
| 36 | +- Given test cases pass |
| 37 | +- New test cases (let's just generate random strings of `a`s and `b`s...): |
| 38 | + - `s = "baabbbbbbaaaabaaabbbbaaabbbabaabbaababaaaaabbaabaabbbbabbabaabbaabbbbaaabbaaaaaaaaaabbababbabbaaaaba"`: pass |
| 39 | + - `s = "aaabaabbaabbaabbaababaaabaaabababababaaaaabbababbbabaaaabababbbabbaabbbbaaababaaabbbabbbabbbabbbaabbaaabbbabaabbbaaababbbaaabbaaaabbbaaaaabbabbbbabaaabbaaabababaabaaaabaabbbabbabbbababbaaabaaaabbaabaabaaaaabbbaaaaaaabaababaabbaababaababbabbabbaababbabbabaabbaaaaaaaabbaababbbaababababbabbabbbababbaabbbbbbbbabbbaaaabaaaaaabbaaabbbababaaababaabababaabababbbaaaabbbaabaabbaaaaabbabbbbabbbaaaaaaabaabaabbabbababbababbbbbbaaaaaabbbababbaababbabbaaaabbaabbbbbbbaabbbbaabaaabbaaaabbabbbaababbabbaabbbbaabababbaaaaabbaaaababbabbabbbbaaaabaabbaaaababbbbbabbabbbababbabbbbbbbbaabbabaabbbabbbaabababbbabbbbabbabbaaaaabbabbbbabbabbabaabbaaaaaabbbabbaaabaabaaaababbababaabbaabbababaaabbbbaaaababababbabbaabbbbbabbaababaaabbbaabaaabaabaabbaababbababababaaabaabaaaaabbabbbaaabbabababbababababbbbaababaabbbabaaaaaabaaaabaaaabaaabaabaababbbbbabbbbaaabbbbababaabbbbbaaabababbababaabbbbbbbbabbbabbaabbbabbbabaabbbaabbbbabbbaaaaaaabbaaaabaabbabbbbbbabababbabaabaabaabaaaaabaaabbbbabbabbbbabbaaaabbababbabbbaaabbaabbbbba"`: pass |
| 40 | +- Ok, let's submit! |
| 41 | + |
| 42 | + |
| 43 | + |
| 44 | +Solved 🥳! |
0 commit comments