您的位置:首页 > 其它

LeetCode---Palindrome Partitioning

2015-12-04 17:42 169 查看
题目大意:给出一个字符串,对该字符串进行各种切割,使得切割后的每个子串是回文,找出所有的情况。

算法思想:

整体上采用深度优先搜索的思想。遍历字符串的每一个元素,判断从该元素处断开是否是一个合法方案(即构成回文)若是则递归搜索剩下一部分字符串的可行方案。

代码如下:

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

void dfs(string s,vector<vector<string> >&res,vector<string> &path,size_t start ){

if(start==s.size()){
res.push_back(path);
return ;
}

for(int i=start;i<s.size();++i){
if(isPalindrome(s,start,i)){
path.push_back(s.substr(start,i-start+1));
dfs(s,res,path,i+1);
path.pop_back();
}
}

}

bool isPalindrome(string s,size_t start,size_t end){

while(start<end&&s[start]==s[end]){
++start;
--end;
}
return start<end?false:true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: