码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Palindrome Partitioning II

时间:2015-03-13 07:04:57      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

(Version 0.0)

这道题是在Palindrome Partitioning的基础之上要求找一个最少分割次数的partitioning,因为之前已经做过了Palindrome Partitioning,所以最开始自然想到了用DP记录所有substring是否是palindrome,然后再对每个substring的mincuts用DP方法逐个由短至长求解,但是在LeetCode OJ上面run大数据时会超时,代码如下:

 1 public class Solution {
 2     public int minCut(String s) {
 3         boolean[][] isPalindrome = new boolean[s.length()][s.length()];
 4         int[][] cuts = new int[s.length()][s.length()];
 5         for (int i = 0; i < isPalindrome.length; i++) {
 6             isPalindrome[i][i] = true;
 7         }
 8         for (int l = 2; l <= s.length(); l++) {
 9             for (int i = 0; i + l <= s.length(); i++) {
10                 int j = i + l - 1;
11                 isPalindrome[i][j] = (isPalindrome[i + 1][j - 1] || l == 2) && s.charAt(i) == s.charAt(j);
12                 if (!isPalindrome[i][j]) {
13                     cuts[i][j] = Integer.MAX_VALUE;
14                     for (int k = i; k < j; k++) {
15                         cuts[i][j] = Math.min(cuts[i][k] + cuts[k + 1][j] + 1, cuts[i][j]);
16                     }
17                 }
18             }
19         }
20         return cuts[0][s.length() - 1];
21     }
22 }

 

看来需要对上面的代码进行优化,去除一些无用功。原题要求的是整个string的mincut,所以求起始位置不是最开头的substring的mincut其实对于问题的解决没有帮助,应该是可以省去的无用功,所以一个可能的优化是将最内层计算cuts数组元素的循环从计算isPalindrome数组的循环最内层拿出去。

(待续)

[LeetCode] Palindrome Partitioning II

标签:

原文地址:http://www.cnblogs.com/icecreamdeqinw/p/4334176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!