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.
For example, given s = "aab"
,
Return 1
since the palindrome partitioning ["aa","b"]
could be produced using 1 cut.
使用动态规划 Runtime: 11 ms beats 98.62% of java submissions.
public int minCut(String str) {
if (str == null || str.equals("")) return 0;
char[] chs = str.toCharArray();
int n = chs.length;
int[] cut = new int[n + 1];
for (int i = 0; i <= n; i++) cut[i] = i - 1;
for (int i = 0; i < n; i++) {
for (int j = 0; i - j >= 0 && i + j < n && chs[i - j] == chs[i + j]; j++) {
cut[i + j + 1] = Math.min(cut[i + j + 1], 1 + cut[i - j]);//以i为中心,奇数个字符
}
for (int j = 1; i - j + 1 >= 0 && i + j < n && chs[i - j + 1] == chs[i + j]; j++) {
cut[i + j + 1] = Math.min(cut[i + j + 1], 1 + cut[i - j + 1]);//以i往前,偶数个字符
}
}
return cut[n];
}
http://www.guoting.org/leetcode/leetcode-132-palindrome-partitioning-ii/