You are given a string s
consisting of digits from 1
to 9
and an integer k
.
A partition of a string s
is called good if:
- Each digit of
s
is part of exactly one substring. - The value of each substring is less than or equal to
k
.
Return the minimum number of substrings in a good partition of s
. If no good partition of s
exists, return -1
.
Note that:
- The value of a string is its result when interpreted as an integer. For example, the value of
"123"
is123
and the value of"1"
is1
. - A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s = "165462", k = 60 Output: 4 Explanation: We can partition the string into substrings "16", "54", "6", and "2". Each substring has a value less than or equal to k = 60. It can be shown that we cannot partition the string into less than 4 substrings.
Example 2:
Input: s = "238182", k = 5 Output: -1 Explanation: There is no good partition for this string.
Constraints:
1 <= s.length <= 105
s[i]
is a digit from'1'
to'9'
.1 <= k <= 109
Related Topics:
String, Dynamic Programming, Greedy
// OJ: https://leetcode.com/problems/partition-string-into-substrings-with-values-at-most-k
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
int minimumPartition(string s, int k) {
int N = s.size(), ans = 0;
for (int i = 0; i < N; ++ans) {
long n = 0;
while (i < N && n * 10 + s[i] - '0' <= k) {
n = n * 10 + s[i++] - '0';
}
if (n == 0) return -1;
}
return ans;
}
};