「回溯法」Palindrome Partitioning
2015-09-16 16:58
363 查看
/************************************************************************* > File Name: PalindromePartitioning.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月16日 星期三 16时46分38秒 > Problem: Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s. Have you met this question in a real interview? Yes Example given s = "aab", Return [ ["aa","b"], ["a","a","b"] ] ************************************************************************/ #include<iostream> #include<vector> #include<string> using namespace std; class Solution { public: bool isPalindrome(const string &str) { if(str.empty()) return true; int size = str.size(); for(int i = 0, j = size-1; i < j; ++i, --j) { if(str[i] != str[j]) return false; } return true; } vector<vector<string> > partition(string s) { vector<vector<string> >result; vector<string> oneResult; partitionCore(s, 0, result, oneResult); return result; } void partitionCore(string &s, int start, vector<vector<string> > &result, vector<string> oneResult) { int size = s.size(); if(start == size) { result.push_back(oneResult); return; } for(int i = start; i < size; ++i) { string strTemp(s.substr(start, i-start+1)); if(isPalindrome(strTemp)) { oneResult.push_back(strTemp); partitionCore(s, i+1, result, oneResult); oneResult.pop_back(); } } } }; void print(const vector<vector<string> > &result) { for(int i = 0; i < result.size(); ++i) { for(int j = 0; j < result[i].size(); ++j) { cout<<result[i][j]<<" "; } cout<<endl; } } int main() { string str("aab"); Solution sol; vector<vector<string> > result = sol.partition(str); print(result); return 0; }
相关文章推荐
- nginx随着passenger构造ruby on rails页
- [动态规划]保存子问题的结果
- xenserver
- MySQL多实例安装
- 火车头采集器在线发布模块制作教程
- Get classpath for current running thread
- android Bitmap内存优化(四) android 本地资源图片的处理
- Android 实现ListView的A-Z字母排序及过滤搜索功能(通讯录)
- 安装Redis和Redis Cluster
- TCP报文段首部详解
- 学习Linux第三天
- sql语句:创建事物
- poj_2406 kmp
- Android的隐式意图
- X-Code 报错 ld: library not found for -lAFNetworking
- iOS App Archive & Generic Xcode Archive 无法打包发布ipad
- android ListView的优化
- 安全通信系统--OpenSSL的安装编译、证书生成
- UINavigationController
- sleep与wait的区别,详细解答(通过代码验证)