leetcode Palindrome Partitioning

系统 1437 0

把一个字符串划分成几个回文子串,枚举所有可能的划分

例如

For example, given  s  =  "aab" ,
Return

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

写一个子函数判断是否为回文。

然后dfs,这个dfs比之前的稍微难理解一些。dfs函数每次输入的起点代表之前已经处理好了,从这个起点开始到结尾len的有几种长度可能组成,回文的都要dfs遍历一次,如果没有就++。例如输入为abcc,假设此时start指向b了,那么b是回文,要dfs从start+1开始,因为b的长度为1,一直继续。。。之后还要回到b开始长度为2的串也就是bc然后不是回文,再判断bcc不是回文。这里嵌套着的还是要好好理解。

      
        class
      
      
         Solution {


      
      
        public
      
      
        :



    
      
      
        //
      
      
        131
      
      
        bool
      
       isPalindrome131(
      
        string
      
      
         str)

    {

        
      
      
        int
      
       len =
      
         str.size();

        
      
      
        if
      
       (len <= 
      
        1
      
      ) 
      
        return
      
      
        true
      
      
        ;

        
      
      
        int
      
       i = 
      
        0
      
      
        ;

        
      
      
        while
      
       (i <= len / 
      
        2
      
      
        )

        {

            
      
      
        if
      
       (str[i] != str[len - i - 
      
        1
      
      
        ])

                
      
      
        return
      
      
        false
      
      
        ;

            i
      
      ++
      
        ;

        }

        
      
      
        return
      
      
        true
      
      
        ;

    }

    
      
      
        void
      
       dfs131(vector<vector<
      
        string
      
      > > &ans, vector<
      
        string
      
      > &tmp, 
      
        string
      
       &s, 
      
        int
      
      
         start)

    {

        
      
      
        int
      
       len =
      
         s.size();

        
      
      
        if
      
       (start >= len) {ans.push_back(tmp); 
      
        return
      
      
        ;}

        
      
      
        for
      
       (
      
        int
      
       i = 
      
        1
      
      ; i <= len - start; i++
      
        )

            
      
      
        if
      
      
         (isPalindrome131(s.substr(start, i)))

            {

                tmp.push_back(s.substr(start, i));

                dfs131(ans, tmp, s, start 
      
      +
      
         i);

                tmp.pop_back();

            }

    }

    vector
      
      <vector<
      
        string
      
      > > partition(
      
        string
      
      
         s)

    {

        
      
      
        int
      
       len =
      
          s.size();

        vector
      
      <vector<
      
        string
      
      > >
      
         ans;

        
      
      
        if
      
       (len == 
      
        0
      
      ) 
      
        return
      
      
         ans;

        vector
      
      <
      
        string
      
      >
      
         tmp;

        dfs131(ans, tmp, s, 
      
      
        0
      
      
        );

        
      
      
        return
      
      
         ans;

    }

};
      
    

 

leetcode Palindrome Partitioning


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论