LeetCode131:Palindrome Partitioning

原创 2015年07月07日 17:51:57

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”]
]

最开始看到这道题时毫无思路,可能是看到回文就怕了。也想不出如何用回溯来求解。

于是在纸上随便乱画了一些,结果发现好像可以按照这个思路求解了,简直囧啊。

对于上面的”aab”作为输入,可以这么寻找回文:
“a”+”ab”构成的回文串
“aa”+”b”构成的回文串
“aab”不是回文,所以直接退出。

于是感觉对于一个字符串,可以对这个字符串进行遍历,如果前pos个字符串本身是个回文字符,那么只需要求解后面的子字符的回文串即可,于是这个问题被分解成了一个更小的问题。这道题更像一个分治法的题,将问题规模不断缩小,当然的遍历字符串的过程中需要进行回溯。

除了需要一个进行递归的辅助函数外,还需要定义一个判断一个字符串是否是回文字符串的辅助函数,程序的逻辑非常简单。

这道题和Combination Sum 比较类似,一开始看到这道题时完全感觉无从下手,但是在纸上写几个测试用例,从特殊的测试用例中就可以发现规律了。加上回溯后的递归都没有那么一目了然,可能有测试用例会更容易懂一些。
runtime:20ms

class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<string> path;
        vector<vector<string>> result;
        helper(s,0,path,result);
        return result;
    }

    void helper(string s,int pos,vector<string> & path,vector<vector<string>> & result)
    {
        if(pos==s.size())
        {
            result.push_back(path);
            return ;
        }
        for(int i=pos;i<s.size();i++)
        {
            if(isPalindrome(s.substr(pos,i-pos+1)))
            {
                path.push_back(s.substr(pos,i-pos+1));
                helper(s,i+1,path,result);
                path.pop_back();
            }
        }
    }

    bool isPalindrome(string s)
    {
        int first=0;
        int end=s.size()-1;
        while(first<end)
        {
            if(s[first++]!=s[end--])
                return false;
        }
        return true;
    }
};

相关文章推荐

LeetCode(131)Palindrome Partitioning

题目 Given a string s, partition s such that every substring of the partition is a palindrome. Retu...
  • fly_yr
  • fly_yr
  • 2015年12月28日 13:42
  • 1043

131. Palindrome Partitioning | Java最短代码实现

原题链接:131. Palindrome Partitioning 【思路】 本题考查回溯算法。从下标0开始遍历字符串,一旦在下标 i 找到回文子字符串,那么就把下标从 0 到 i 的子字符串加入...

LeetCode 131. Palindrome Partitioning(回文分区)

原题网址:https://leetcode.com/problems/palindrome-partitioning/ Given a string s, partition s such tha...
  • jmspan
  • jmspan
  • 2016年05月27日 00:25
  • 353

leetCode练习(131)

题目:Palindrome Partitioning 难度:medium 问题描述: Given a string s, partition s such that every substrin...

leetcode131—Palindrome Partitioning

leetcode131—Palindrome Partitioning

LeetCode(131)Palindrome Partitioning

题目 Given a string s, partition s such that every substring of the partition is a palindrome. Retu...
  • fly_yr
  • fly_yr
  • 2015年12月28日 13:42
  • 1043

什么是线程安全和线程不安全

首先要明白线程的工作原理,jvm有一个main   memory,而每个线程有自己的working   memory,一个线程对一个variable进行操作时,都要在自己的working   memo...

【Leetcode】131. Palindrome Partitioning

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

LeetCode 46. Permutations47. Permutations II&&131. Palindrome Partitioning(全排列问题)

LeetCode 46. Permutations Given a collection of distinct numbers, return all possible permutations...

LeetCode 131. Palindrome Partitioning 树形问题,状态回溯

131. Palindrome Partitioning Given a string s, partition s such that every substring of the partit...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode131:Palindrome Partitioning
举报原因:
原因补充:

(最多只允许输入30个字)