From d4431d7c33754d06becf527107c1b15e591c051a Mon Sep 17 00:00:00 2001 From: Yam Borodetsky Date: Sun, 15 Feb 2026 20:12:51 +0500 Subject: [PATCH 1/2] Refactor `Solution` class into `SolutionSplitPoint` and add corresponding unit tests. --- .../Solution.java | 36 ++---------------- .../SolutionSplitPoint.java | 37 +++++++++++++++++++ .../SolutionSplitPointTest.java | 14 +++++++ 3 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPoint.java create mode 100644 src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPointTest.java diff --git a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java index ae6622d..ab47649 100644 --- a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java +++ b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java @@ -1,37 +1,7 @@ package codes.yam.leetcode.minimumdeletionstomakestringbalanced; -/** - * Solution for the Minimum Deletions to Make String Balanced problem. - * - *

Uses a split-point counting approach to compute minimum deletions in constant space. - * - *

- */ -class Solution { - /** - * Returns the minimum number of deletions to make {@code s} balanced. - * - * @param s the string of {@code 'a'} and {@code 'b'} characters - * @return the minimum number of deletions needed - */ - int minimumDeletions(String s) { - int bCount = 0; - int aAfter = 0; - int bBefore = 0; - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) == 'b') { - bCount++; - } else { - aAfter++; - } - if (aAfter + bBefore > bCount) { - bBefore = bCount; - aAfter = 0; - } - } - return Math.min(bCount, aAfter + bBefore); +public class Solution { + public int minimumDeletions(String s) { + return 0; } } diff --git a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPoint.java b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPoint.java new file mode 100644 index 0000000..327c31f --- /dev/null +++ b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPoint.java @@ -0,0 +1,37 @@ +package codes.yam.leetcode.minimumdeletionstomakestringbalanced; + +/** + * Solution for the Minimum Deletions to Make String Balanced problem. + * + *

Uses a split-point counting approach to compute minimum deletions in constant space. + * + *

+ */ +class SolutionSplitPoint { + /** + * Returns the minimum number of deletions to make {@code s} balanced. + * + * @param s the string of {@code 'a'} and {@code 'b'} characters + * @return the minimum number of deletions needed + */ + int minimumDeletions(String s) { + int bCount = 0; + int aAfter = 0; + int bBefore = 0; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == 'b') { + bCount++; + } else { + aAfter++; + } + if (aAfter + bBefore > bCount) { + bBefore = bCount; + aAfter = 0; + } + } + return Math.min(bCount, aAfter + bBefore); + } +} diff --git a/src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPointTest.java b/src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPointTest.java new file mode 100644 index 0000000..2e58b54 --- /dev/null +++ b/src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionSplitPointTest.java @@ -0,0 +1,14 @@ +package codes.yam.leetcode.minimumdeletionstomakestringbalanced; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +class SolutionSplitPointTest { + @ParameterizedTest + @MethodSource("codes.yam.leetcode.minimumdeletionstomakestringbalanced.TestCases#cases") + void minimumDeletions(String s, int expected) { + assertEquals(expected, new SolutionSplitPoint().minimumDeletions(s)); + } +} From 880243976c343fb87907947e40be8901819c86fc Mon Sep 17 00:00:00 2001 From: Yam Borodetsky Date: Sun, 15 Feb 2026 21:09:21 +0500 Subject: [PATCH 2/2] Implement space-optimized DP solution for `Minimum Deletions to Make String Balanced` and remove unused recursive and memoized solutions. --- .../Solution.java | 25 ++++++++++++++++--- .../SolutionDp.java | 17 ++++++++++--- .../SolutionMemoized.java | 25 ------------------- .../SolutionRecursive.java | 25 ------------------- .../package-info.java | 15 ++++++----- .../SolutionMemoizedTest.java | 16 ------------ .../SolutionRecursiveTest.java | 16 ------------ 7 files changed, 42 insertions(+), 97 deletions(-) delete mode 100644 src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionMemoized.java delete mode 100644 src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionRecursive.java delete mode 100644 src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionMemoizedTest.java delete mode 100644 src/test/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionRecursiveTest.java diff --git a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java index ab47649..ff3d2a0 100644 --- a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java +++ b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/Solution.java @@ -1,7 +1,26 @@ package codes.yam.leetcode.minimumdeletionstomakestringbalanced; -public class Solution { - public int minimumDeletions(String s) { - return 0; +/** + * Solution for the Minimum Deletions to Make String Balanced problem. + * + *

Optimizes {@code SolutionDp} by collapsing the DP table into a single variable. + * + *

+ */ +class Solution { + int minimumDeletions(String s) { + int bCount = s.charAt(0) == 'b' ? 1 : 0; + int minDel = 0; + for (int i = 1; i < s.length(); i++) { + if (s.charAt(i) == 'b') { + bCount++; + } else { + minDel = Math.min(minDel + 1, bCount); + } + } + return minDel; } } diff --git a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionDp.java b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionDp.java index 453d052..cf15851 100644 --- a/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionDp.java +++ b/src/main/java/codes/yam/leetcode/minimumdeletionstomakestringbalanced/SolutionDp.java @@ -3,7 +3,7 @@ /** * Bottom-up DP solution for the Minimum Deletions to Make String Balanced problem. * - *

Flips the memoized recursion into an iterative DP table. + *

Iterative DP table tracking minimum deletions at each position. * *