【剑指 Offer II】 094. 最少回文分割

wuchangjian2021-11-15 14:54:43编程学习

题目:
给定一个字符串 s,请将 s 分割成一些子串,使每个子串都是回文串。

返回符合要求的 最少分割次数 。

示例 1:

输入:s = “aab”
输出:1
解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。

示例 2:

输入:s = “a”
输出:0

示例 3:

输入:s = “ab”
输出:1

提示:

1 <= s.length <= 2000
s 仅由小写英文字母组成

注意:本题与主站 132 题相同: https://leetcode-cn.com/problems/palindrome-partitioning-ii/

答案:

class Solution {
    public int minCut(String s) {
        //换个角度想想,当切割次数最少使得切割后的所有字符串都是回文时,也正是这些回文子串最长的时候,那么如果说能找到以每个字符为中心的最长回文串,实际上就已经找到了答案。
        //dp数组存的是当前位置的最少分割次数
        if(s == null || s.length() <= 1)
            return 0;
        int len = s.length();
        int[] dp = new int[len];
        Arrays.fill(dp, len - 1);
        for(int i = 0; i < len; i++){
            minCutCount(s, i, i, dp);//奇数位中心
            minCutCount(s, i, i + 1, dp);//偶数位中心
        }
        return dp[len - 1];
    }
    public void minCutCount(String s, int i, int j, int[] dp){
        int len = s.length();
        while(i >= 0 && j < len && s.charAt(i) == s.charAt(j)){
            dp[j] = Math.min(dp[j], (i == 0 ? -1 : dp[i - 1]) + 1);
            i--;
            j++;
        }
    }
}

相关文章

day03总结

1:什么是场景法? 通过场景描述的业务流程 ( 业...

解决报错:Couldn‘t create temporary file /tmp/apt.conf.IRqbCz

解决报错:Couldn‘t create temporary file /tmp/apt.conf.IRqbCz

目录 问题解决结尾 问题 操作容器应该是属于服务器开发同学的常规操作,...

【图像分割】基于改进的模糊聚类WFCM算法实现图像分割matlab代码

【图像分割】基于改进的模糊聚类WFCM算法实现图像分割matlab代码

1 简介 模糊 C 均值聚类(FCM)算法是一种基于非监督...

C语言求圆面积(c)

#include <stdio.h> #include <stdlib...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。