zoukankan      html  css  js  c++  java
  • LeetCode:Palindrome Partitioning(DP TLE)

    Given a string s, partition s such that every substring of the partition is a palindrome.

    Return all possible palindrome partitioning of s.

    For example, given s = "aab",
    Return

      [
        ["aa","b"],
        ["a","a","b"]
      ]
    

    动规还TLE 我也是醉了!

    class Solution {
    public:
        vector<vector<string>> partition(string s) {
            //dp解法
            /*用来记录s[i]到s[j]是否为palindrome
            dp[i][j]   1、s[i]==s[j]&&j-i<2
            2、s[i]==s[j]&&s[i+1]到s[j-1]为palindrome 
            所以事先要知道dp[i+1][j-1] i是s.length-- j从i++
            */
            const int n=s.size();
            
            bool dp[n][n];
            fill_n(&dp[0][0],n*n,false);
            for(int i=s.size()-1;i>=0;i--)
                for(int j=i;j<n;++j)
                    if(s[i]==s[j]&&(j-i<2)||dp[i+1][j-1])
                        dp[i][j]=true;
                
                        
           //开始根据dp[i][j]截取字符串 获得结果
           
           vector<vector<string>> sub_palins[n]; 
           
           for(int i=n-1;i>=0;i--)
            for(int j=i;j<n;++j)
                if(dp[i][j])
                {
                    const string palindrome=s.substr(i,j-i+1);
                    if(j+1<n)
                        for(auto v:sub_palins[j+1])
                            {
                                v.insert(v.begin(),palindrome);
                                sub_palins[i].push_back(v);
                            }
                    else{
                            sub_palins[i].push_back(vector<string>{palindrome});
                    }
                }
                
                return sub_palins[0];
        }
    };
    
  • 相关阅读:
    124. 二叉树中的最大路径和
    快速排序,归并排序
    剑指offer ——重建二叉树
    共享指针的简单实现
    string_自定义
    幸运的袋子
    动态规划——出差问题
    计算数组平均值
    时间格式化并算差值
    适配器模式
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4748170.html
Copyright © 2011-2022 走看看