资讯专栏INFORMATION COLUMN

[LintCode] Palindrome Partitioning II

funnyZhang / 2483人阅读

摘要:假设我们从后向前,分析到第位,开始判断,若为,说明从第位向前到第位的子串是一个回文串,则就等于第位的结果加。然后让继续增大,判断第位到最后一位的范围内,有没有更长的回文串,更长的回文串意味着存在更小的,用新的来替换。

Problem

Given a string s, cut s into some substrings such that every substring is a palindrome.

Return the minimum cuts needed for a palindrome partitioning of s.

Example

Given s = "aab",

Return 1 since the palindrome partitioning ["aa", "b"] could be produced using 1 cut.

Note

Palindrome Partitioning I是DFS的做法,II是DP的做法。
本题的思路是:建立boolean二维数组dp[i][j],存放字符串s从第i到第j位是否为回文的布尔值;同时建立整型数组min[i],存放从最后一位到第i位都是回文串的最小切割次数。然后从字符串s的最后一个字符开始,向前进行分析。
举个例子。假设我们从后向前,分析到第i位,开始判断dp[i][j],若为true,说明从第j位向前到第i位的子串是一个回文串,则min[i]就等于第j位的结果min[j]1。然后让j继续增大,判断第i位到最后一位的范围内,有没有更长的回文串,更长的回文串意味着存在更小的min[j],用新的min[j]+1来替换min[i]

Solution
public class Solution {
    public int minCut(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        int[] min = new int[n];
        for (int i = n-1; i >= 0; i--) {
            min[i] = n-i-1;
            for (int j = i; j < n; j++) {
                dp[i][j] = s.charAt(i) == s.charAt(j) && (dp[i+1][j-1] || j-i <= 1);
                if (dp[i][j]) min[i] = Math.min(min[i], j+1 < n ? min[j+1]+1 : 0);
            }
        }
        return min[0];
    }
};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65809.html

相关文章

  • [LintCode] Palindrome Partitioning

    Problem Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s. Example Given s = aab, return: [ [aa,b], [a,a,b...

    NicolasHe 评论0 收藏0
  • leetcode132. Palindrome Partitioning II

    摘要:题目要求现在有一个字符串,将分割为多个子字符串从而保证每个子字符串都是回数。我们只需要找到所有可以构成回数的并且得出最小值即可。即将字符作为,将字符所在的下标列表作为。再采用上面所说的方法,利用中间结果得出最小分割次数。 题目要求 Given a string s, partition s such that every substring of the partition is a ...

    jeyhan 评论0 收藏0
  • [leetcode]132. Palindrome Partitioning II

    摘要:用表示当前位置最少需要切几次使每个部分都是回文。表示到这部分是回文。如果是回文,则不需重复该部分的搜索。使用的好处就是可以的时间,也就是判断头尾就可以确定回文。不需要依次检查中间部分。 Given a string s, partition s such that every substring of the partition is a palindrome. Return the...

    Airy 评论0 收藏0
  • [Leetcode] Palindrome Partitioning 回文分割

    摘要:深度优先搜素复杂度时间空间思路因为我们要返回所有可能的分割组合,我们必须要检查所有的可能性,一般来说这就要使用,由于要返回路径,仍然是典型的做法递归时加入一个临时列表,先加入元素,搜索完再去掉该元素。 Palindrome Partitioning Given a string s, partition s such that every substring of the parti...

    leanote 评论0 收藏0
  • 131. Palindrome Partitioning and 140. Word Break I

    摘要:找到开头的某个进行切割。剩下的部分就是相同的子问题。记忆化搜索,可以减少重复部分的操作,直接得到后的结果。得到的结果和这个单词组合在一起得到结果。 Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome...

    stonezhu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<