0132. Palindrome Partitioning II
https://leetcode.com/problems/palindrome-partitioning-ii
Description
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.
ac
class Solution {
public int minCut(String s) {
// edge cases
if (s == null || s.length() <= 1) return 0;
int n = s.length();
int[] dp = new int[n];
for (int i = 0; i < dp.length; i++) {
dp[i] = i;
}
for (int i = 0; i < n; i++) {
// 1st round, aba
int l = i, r = i;
while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) {
int tmp = l == 0 ? 0 : dp[l-1] + 1; // if l reach head, 0 cut.
dp[r] = Math.min(dp[r], tmp);
l--;
r++;
}
// 2nd round, abba
l = i; r = i + 1;
while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) {
int tmp = l == 0 ? 0 : dp[l-1] + 1; // if l reach head, 0 cut.
dp[r] = Math.min(dp[r], tmp);
l--;
r++;
}
}
return dp[n-1];
}
}
Last updated
Was this helpful?