|
1 | 1 | # [Problem 1653: Minimum Deletions to Make String Balanced](https://leetcode.com/problems/minimum-deletions-to-make-string-balanced/description/?envType=daily-question)
|
2 | 2 |
|
3 | 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`. |
4 | 7 |
|
5 | 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 |
6 | 10 |
|
7 | 11 | ## Attempted solution(s)
|
8 | 12 | ```python
|
9 |
| -class Solution: # paste your code here! |
10 |
| - ... |
| 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 |
11 | 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