Geek

博客园 首页 新随笔 联系 订阅 管理

题目描述
给出一个字符串s,分割s使得分割出的每一个子串都是回文串
计算将字符串s分割成回文分割结果的最小切割数
例如:给定字符串s="aab",
返回1,因为回文分割结果["aa","b"]是切割一次生成的。
示例1
输入
复制
"aab"
返回值
复制
1


class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return int整型
     */
    int minCut(string s) {
        int n = s.size();
        if (n<=1) return 0;
       
        int dp[n+1];
        memset(dp,0x3f,sizeof dp);
        dp[0]=-1;
        for(int i=0;i<n;++i) {
            for(int len=0;i-len>=0 && i+len<n && s[i-len]==s[i+len];++len) {
                dp[i+len+1] = min(dp[i+len+1],dp[i-len]+1);
            }
            for(int len=0;i-len>=0 && i+len+1<n&& s[i-len]==s[i+len+1]; ++len) {
                dp[i+len+2] = min(dp[i+len+2],dp[i-len]+1);
            }
        }
        return dp[n];
    }
    bool isPalid(string &s,int i,int j) {
        while(i<j) if(s[i++]!=s[j--]) return false;
        return true;
    }
};


题目描述
给定一个字符串s,分割s使得s的每一个子串都是回文串
返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
示例1
输入
复制
"dde"
返回值
复制
[["d","d","e"],["dd","e"]]




class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return string字符串vector<vector<>>
     */
    vector<vector<string> > partition(string s) {
        // write code here
        vector<vector<string>> res;
        vector<string> cur;
        dfs(res,cur,s);
        return res;
        
        
    }
    void dfs(vector<vector<string>> &res,vector<string>&cur,string& s) {
        if(s.size()<1) {
            res.push_back(cur);
            return;
        }
        for(int len=1;len<=s.size();++len) {
            string sub = s.substr(0,len);
            if(isPali(sub,0,len-1)) {
                cur.push_back(sub);
                string p = s.substr(len);
                dfs(res,cur,p);
                cur.pop_back();
            }
        }
    }
    
    
    bool isPali(string&s,int l,int r) {
        if(l==r) return true;
        while(l<r )if(s[l++]!=s[r--]) return false;
        return true;
    }
};

posted on 2021-01-25 12:41  .geek  阅读(98)  评论(0编辑  收藏  举报