您的位置:首页 > 其它

LeetCode 132 Palindrome Partitioning II (动态规划)

2016-10-23 11:59 651 查看
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.

题目链接:https://leetcode.com/problems/palindrome-partitioning-ii/

题目分析:设dp[i]为从i到len最少要切的次数,注意距离小于2的情况,为了方便 将dp[len]初始化为-1,因为该方法是找到一个回文就切一下,所以整个串是回文的情况实际上是不用切的

public class Solution {
public int minCut(String s) {
int len = s.length();
if (len < 2) {
return 0;
}
int[] dp = new int[len + 1];
boolean[][] isPalindrome = new boolean[len + 1][len + 1];
for (int i = 0; i < len; i ++) {
dp[i] = len - i - 1;
isPalindrome[i][i] = true;
}
dp[len] = -1;
for (int i = len - 1; i >= 0; i --) {
for (int j = i; j < len; j ++) {
if (s.charAt(i) == s.charAt(j) && (j - i < 2 || isPalindrome[i + 1][j - 1])) {
dp[i] = Math.min(dp[i], dp[j + 1] + 1);
isPalindrome[i][j] = true;
}
}
}
return dp[0];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: