The Number of Ways to Separate Numbers problem gives you a numeric string (no leading zeros). Count the number of ways to split it into a sequence of at least 2 numbers where each number is greater than or equal to the previous (non-decreasing). This hard coding problem uses DP with a suffix array for efficient string comparison.
Walmart Labs asks this because the naive O(n³) DP (comparing all substring pairs with direct string comparison) is too slow. Using a suffix array to compare substrings in O(1) after O(n log n) preprocessing gives the required efficiency. The suffix array, string, and dynamic programming interview pattern is the core.
DP with suffix array for O(1) comparison. dp[i][j] = ways to partition s[j..n-1] where the previous number ended at index i-1 and the current number starts at j. Transition: for each split at position k > j, the number s[j..k-1] must be ≥ s[i..j-1] (numerically). Use suffix array (or LCP array) to compare: if lengths differ, the longer number is larger; if equal length, use LCP to determine lexicographic order in O(1). Apply prefix sums over the DP for O(n²) total.
s="1", s="327". s="327": split into "3","27"→3<27✓, "32","7"→32>7✗, "3","2","7"→3>2✗. Valid: "3,27" → 1 way.
s="000": only "000" itself as 1 number (but need ≥2 parts). No valid splits. Answer=0.
DP problems with string segment comparisons requiring O(1) per query need suffix arrays with LCP arrays. Build the SA+LCP in O(n log n), then use LCP to determine comparison results in O(1). This is an advanced technique but mastering it unlocks a whole class of hard string DP problems. Practice building suffix arrays from scratch and computing LCP arrays using Kasai's algorithm before attempting problems that use them inside DP.