Minimum Substring Partition of Equal Character Frequency - Problem
Balanced String Partitioning Challenge

Given a string s, you need to partition it into the minimum number of balanced substrings.

A balanced string is one where each character appears the same number of times. For example:
"ab" is balanced (both 'a' and 'b' appear once)
"aabb" is balanced (both 'a' and 'b' appear twice)
"abc" is balanced (all characters appear once)
"aab" is not balanced ('a' appears twice, 'b' appears once)

Example: For s = "ababcc":
✅ Valid partitions: ["abab", "c", "c"], ["ab", "abc", "c"], ["ababcc"]
❌ Invalid partitions: ["a", "bab", "cc"] ("bab" is unbalanced)

Goal: Return the minimum number of balanced substrings needed to partition the entire string.

Input & Output

example_1.py — Basic Example
$ Input: s = "ababcc"
Output: 3
💡 Note: One optimal partition is ["abab", "c", "c"]. The substring "abab" has 'a' and 'b' each appearing 2 times (balanced), and each "c" is trivially balanced with frequency 1.
example_2.py — All Same Characters
$ Input: s = "aaaa"
Output: 1
💡 Note: The entire string "aaaa" is already balanced since only 'a' appears (frequency 4). No partitioning needed.
example_3.py — Force Multiple Partitions
$ Input: s = "abcabc"
Output: 2
💡 Note: We can partition as ["abc", "abc"]. Each substring has 'a', 'b', and 'c' appearing once (balanced). We cannot do better than 2 partitions.

Visualization

Tap to expand
a b a b c c"abab" - Balanceda:2, b:2 ✓"c" - Balancedc:1 ✓"c" - Balancedc:1 ✓Dynamic Programming Approachdp[i] = minimum partitions needed from position iTry all balanced substrings starting at i, then solve recursivelyResult: 3 partitions (optimal)cutcut
Understanding the Visualization
1
Identify the string
Start with string 'ababcc' that needs to be partitioned
2
Try different cuts
Attempt cuts at different positions to create substrings
3
Check balance
Verify each substring has equal character frequencies
4
Find minimum
Use dynamic programming to find the minimum number of parts
Key Takeaway
🎯 Key Insight: Use dynamic programming to try all possible balanced starting substrings and memoize results to avoid redundant calculations, achieving O(n³) complexity instead of exponential.

Time & Space Complexity

Time Complexity
⏱️
O(n³)

O(n²) subproblems, each taking O(n) time to check balance

n
2n
Quadratic Growth
Space Complexity
O(n²)

Memoization table and character frequency counting

n
2n
Quadratic Space

Constraints

  • 1 ≤ s.length ≤ 1000
  • s consists only of lowercase English letters
  • The string will always have at least one valid partition
Asked in
Google 45 Amazon 38 Meta 28 Microsoft 22
28.4K Views
Medium Frequency
~25 min Avg. Time
892 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen