Skip to content

Latest commit

 

History

History

2522

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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" is 123 and the value of "1" is 1.
  • 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

Solution 1.

// 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;
    }
};