伴你如风、护你如影|

xzh-yyds

园龄:3年9个月粉丝:0关注:2

leetcode132-分割回文串 II

分割回文串 II

  • 双重dp

首先需要用dp去记录s中回文子串的信息,找出所有的回文子串,方法如上一题。
然后对子串进行拆分,拆分的时候需要用到dp。
对于下标为i这一点,需要去遍历[0, i]这些部分,找出所有以i点结束的回文子串,计算相应的拆分数量,取较小值。
由于最后返回的是分割数量而不是拆分后字符串的数量,所以返回结果为f[n]-1

class Solution {
    public int minCut(String s) {
        int n = s.length(), f[] = new int[n+1];
        boolean dp[][] = new boolean[n][n];
        for(int i = n-1; i >= 0; i--){
            for(int j = i; j < n; j++){
                if(i > j-2) dp[i][j] = s.charAt(i) == s.charAt(j);
                else    dp[i][j] = dp[i+1][j-1] && s.charAt(i) == s.charAt(j);
            }
        }
        Arrays.fill(f, Integer.MAX_VALUE);
        f[0] = 0;
        for(int i = 0; i < n; i++){
            for(int j = i; j >= 0; j--){
                if(dp[j][i])    f[i+1] = Math.min(f[i+1], f[j]+1);
            }
        }
        return f[n]-1;
    }
}

本文作者:xzh-yyds

本文链接:https://www.cnblogs.com/xzh-yyds/p/16594880.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xzh-yyds  阅读(17)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开