分割回文串II

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

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

示例:

输入:?"aab"
输出: 1
解释: 进行一次分割就可将?s 分割成 ["aa","b"] 这样两个回文子串。

class Solution {
public:
    int ispalindrome(string s,int left,int right){
        while(left<right){
            if(s[left]==s[right]){
                left++;
                right--;
            }
            else{
                break;
            }
        }
        if(left<right){
            return 0;
        }
        return 1;
    }

    int dfs(string s,int left,int right,vector<vector<int>>&pa,vector<vector<int>>&dp){
        if(dp[left][right]!=-1)
            return dp[left][right];
        int res = right-left;
        if(pa[left][right]==1||ispalindrome(s,left,right)==1){
            pa[left][right]=1;
            dp[left][right]=0;
            return 0;
        }
        else{
            pa[left][right]=0;
        }
        if(left==right)
        {
            dp[left][right]=1;
            return 1;
        }

        for(int i=left;i<right;i++){
            res = min(res,dfs(s,left,i,pa,dp)+dfs(s,i+1,right,pa,dp)+1);
        }
        dp[left][right]=res;
        return res;
    }
    int minCut(string s) {
        vector<vector<int>>pa(s.size(),vector<int>(s.size(),-1));
        vector<vector<int>>dp(s.size(),vector<int>(s.size(),-1));
        return dfs(s,0,s.size()-1,pa,dp);
    }
};

原文地址:https://www.cnblogs.com/qiuhaifeng/p/11774375.html

时间: 2024-08-28 21:28:09

分割回文串II的相关文章

132 Palindrome Partitioning II 分割回文串 II

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 符合要求的的最少分割次数.例如,给出 s = "aab",返回 1 因为进行一次分割可以将字符串 s 分割成 ["aa","b"] 这样两个回文子串.详见:https://leetcode.com/problems/palindrome-partitioning-ii/description/ class Solution { public: int minCut(str

分割回文串 II &#183; Palindrome Partitioning II

[抄题]: 给定一个字符串s,将s分割成一些子串,使每个子串都是回文. 返回s符合要求的的最少分割次数. [思维问题]: [一句话思路]: [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: [一刷]: [二刷]: [三刷]: [四刷]: [五刷]: [五分钟肉眼debug的结果]: [总结]: [复杂度]:Time complexity: O() Space complexity: O() 降低查询回文判断的方法:预处理,存在数组中,为

LeetCode 131. 分割回文串(Palindrome Partitioning)

131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetCode131. Palindrome Partitioning中等 示例: 输入: "aab" 输出: [ ??["aa","b"], ??["a","a","b"]] Java 实现 略

lintcode 容易题:Palindrome Partitioning 分割回文串

题目: 分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa","b"], ["a","a","b"] ] 解题: 这个题目不好搞啊,需要动态规划 在这里,没有根据动态规划,也解决了,貌似是暴力解决 从下标pos开始,找到下标i使得 pos到i内是回文字符串,再从i+1开始,找到下一

分割回文串[LintCode]

有问题可以私信我,微博地址:http://weibo.com/1683510813/profile?rightmod=1&wvr=6&mod=personinfo 题目:分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa", "b"], ["a", "a", "b"

1、分割回文串——回溯法

题目: 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa", "b"], ["a", "a", "b"] ] 标签 Expand 回溯法 深度优先搜索 package unit1; import java.util.ArrayList; import java.util.List; publ

九章算法面试题48 分割回文串

九章算法官网-原文网址 http://www.jiuzhang.com/problem/48/ 题目 对于给定字符串,求最少需要几次划分,能够将字符串划分为若干子串,每个子串都是一个回文串.如abaab,需要至少1次划分,将字符串划分为:a|baab,每个部分均为回文串. 解答 这是一道典型的在字符串上进行分割的动态规划的问题.一般的状态表示方法如下:f[i]表示将前i个字符组成的子串进行划分,能够最少划分为多少个串,每个串都是回文串.那么有状态转移方程:f[i] = MIN(f[j] + 1,

131 Palindrome Partitioning 分割回文串

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 所有可能的分割方案.例如,给出 s = "aab",返回[  ["aa","b"],  ["a","a","b"]]详见:https://leetcode.com/problems/palindrome-partitioning/description/ class Solution { public: vect

力扣——分割回文串

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ] class Solution { //动态规划加上回溯,就可以遍历种类.......回溯就是专门用来列出的. public List<List<String>> part