题目:
Given a string s
, partition s
such that every substring of the partition is a palindrome
Return the minimum cuts needed for a palindrome partitioning of s
.
Example 1:
Input: s = "aab" Output: 1 Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.
Example 2:
Input: s = "a" Output: 0
Example 3:
Input: s = "ab" Output: 1
Constraints:
1 <= s.length <= 2000
s
consists of lower-case English letters only.
代码:
class Solution {
public:
int minCut(string s) {
int length = s.length();
vector<int> dp(length + 1, 0);
for (int i = 0; i <= length; i++)
dp[i] = i - 1;
for (int i = 0; i < length; i++)
{
for (int j = 0; i - j >= 0 && i + j < length && s[i - j] == s[i + j]; j++)
dp[i + j + 1] = min(dp[i + j + 1], dp[i - j] + 1);
for (int j = 1; i - j + 1 >= 0 && i + j < length && s[i - j + 1] == s[i + j]; j++)
dp[i + j + 1] = min(dp[i + j + 1], dp[i - j + 1] + 1);
}
return dp[length];
}
};