[
dp
backtracking
]
Leetcode 1849 Splitting a String Into Descending Consecutive Values
Problem statement
https://leetcode.com/problems/splitting-a-string-into-descending-consecutive-values/
Solution
The idea is to use dp with states dp(i, num), where we try to split string s[i:] such that it starts with num.
Complexity
We have at most n values for i and upto n values for num. So, it total we have O(n^2) states, each of them have O(n) transitions, each of which needed O(n) time to process num, because numbers can have length upto n. So, total time complexity is O(n^4), space is O(n^3).
Code
class Solution:
def splitString(self, s):
n = len(s)
@lru_cache(None)
def dp(i, num):
if i == n: return 0
ans = -float("inf")
for j in range(i + 1, n+1):
if int(s[i:j]) == num - 1:
ans = max(ans, 1 + dp(j, num - 1))
return ans
for i in range(1, n):
if dp(i, int(s[:i])) > 0: return True
return False