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"] ]
将一个字符串,进行分段,每段都是一个回文。
列出所有的分法。
基本思路:
深度优先递归。
在剩余字符中,逐步偿试,找一个回文子串;若找到,则刨掉此回文后,在剩余的子符继续进行前面的操作。
若剩余字符为空,则找到一个组合。
判断一个字串是否是回文,用头尾两个指针,向中间移动。
在leetcode上实际执行时间为12ms。
class Solution { public: vector<vector<string>> partition(string s) { vector<vector<string>> ans(1); dfs(ans, s, 0); ans.pop_back(); return ans; } void dfs(vector<vector<string>> &ans, const string &s, int start) { if (start == s.size()) { ans.push_back(ans.back()); return; } for (int i=start; i<s.size(); i++) { if (isPalindrome(s, start, i)) { ans.back().push_back(s.substr(start, i-start+1)); dfs(ans, s, i+1); ans.back().pop_back(); } } } bool isPalindrome(const string &s, int start, int end) { while (start <= end && s[start] == s[end]) { ++start; --end; } return start > end; } };
Palindrome Partitioning -- leetcode
原文地址:http://blog.csdn.net/elton_xiao/article/details/45973179