Skip to content
Rain Hu's Workspace
Go back

[LeetCode] 2522. Partition String Into Substrings With Values at Most K

Rain Hu

2522. Partition String Into Substrings With Values at Most K


一、題目

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:

Example 1:

Example 2:

Constraints:


二、分析

if (s.length() > to_string(k).length()) return false;
else if (s.length() < to_string(k).length()) return true;
else return s <= to_string(k);

三、解題

1. DP

int minimumPartition(string s, int k) {
    int n = s.length();
    vector<int> dp(n+1, 100001);        // 因為 s 長度最大為 100000,故我們假定 dp 初始值為 100001
    dp[0] = 0;
    for (int right = 1; right <= n; right++) {
        for (int left = right-1; left >= 0; left--) {
            if (helper(s, left, right, k)) {
                dp[right] = min(dp[right], dp[left] + 1);   // 動態轉移
            } else {
                break;      // pruning,如果當下不滿足 k,那麼再加字元也不會滿足,故可以直接 break
            }
        }
    }
    return dp[n] >= 100001 ? -1 : dp[n];          // 注意最後的回傳值,
}
bool helper(string& s, int left, int right, int k) {
    int len = right - left;
    string subseq = s.substr(left, len);
    if (subseq.length() > to_string(k).length()) return false;
    else if (subseq.length() < to_string(k).length()) return true;
    return subseq <= to_string(k);
}

回目錄 Catalog


Share this post on:

Previous
[LeetCode] 944. Delete Columns to Make Sorted
Next
[LeetCode] 2523. Closest Prime Numbers in Range