Leetcode Palindrome Partitioning
来源:互联网 发布:d3.js官网 编辑:程序博客网 时间:2024/06/16 16:34
Palindrome Partitioning
Total Accepted: 4585 Total Submissions: 18745My SubmissionsGiven 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"] ]
典型的递归回溯法,当然可以利用动态规划法提高点效率。
下面是标准的递归回溯程序:
vector<vector<string> > partition(string s) {vector<vector<string> > rs;vector<string> tmp;storePatition(rs, tmp, s);return rs;}void storePatition(vector<vector<string> > &rs, vector<string> &tmp,string &s){if (s.empty()){rs.push_back(tmp);return;}for (int i = 1; i <= s.length(); i++){string a = s.substr(0, i);if (isPalindrome(a)){tmp.push_back(a);string b = s.substr(i);storePatition(rs, tmp, b);tmp.pop_back();}}}bool isPalindrome(string &s){for (int i = 0, j = s.length()-1; i < j; i++, j--){if (s[i] != s[j]) return false;}return true;}
//2014-2-18 updatevector<vector<string> > partition(string s) {vector<vector<bool> > table(s.length(), vector<bool>(s.length(), true));genTable(table, s);vector<vector<string> > rs;vector<string> tmp;part(rs, tmp, table, s);return rs;}void part(vector<vector<string> > &rs, vector<string> &tmp, vector<vector<bool> > &table, string &s, int start=0){if (start == s.length()){rs.push_back(tmp);return;}for (int d = 1; d <= s.length()-start; d++){if (table[start][start+d-1]){tmp.push_back(s.substr(start, d));part(rs, tmp, table, s, start+d);tmp.pop_back();}}}void genTable(vector<vector<bool> > &table, string &s){for (int d = 2; d <= s.length(); d++){for (int i = 0, j = d - 1; j < s.length(); i++, j++){table[i][j] = (table[i+1][j-1] && s[i] == s[j]);}}}
2 0
- 【leetcode】Palindrome Partitioning && Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning && Palindrome Partitioning II
- LeetCode Palindrome Partitioning I&&Palindrome Partitioning II
- LeetCode Palindrome Partitioning, Palindrome Partitioning II
- [Leetcode][python]Palindrome Partitioning/Palindrome Partitioning II
- Leetcode:Palindrome Partitioning & Palindrome Partitioning II
- LeetCode: Palindrome Partitioning
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode 122: Palindrome Partitioning
- leetcode:Palindrome Partitioning II
- leetcode:Palindrome Partitioning
- 【leetcode】Palindrome Partitioning
- 【leetcode】Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- Leetcode - Palindrome Partitioning
- LeetCode之Palindrome Partitioning
- [LeetCode]Palindrome Partitioning
- dbms_profiler 调整PL/SQL的性能
- 《高效程序员的45个习惯——敏捷开发修炼之道》读书总结
- 银行应对互联网金融
- ccsm ubuntu 特效软件使用记录
- SET的一些知识点
- Leetcode Palindrome Partitioning
- 使用安全令牌保护 RTMP 流
- uva10806 - Dijkstra, Dijkstra. 最小费用流 求两条路权值之和最小
- 高斯日记
- bootstrap modal使用方法
- Oracle11g性能调优--使用SQL Plan Management(1)
- VS2012和SQL Server2008的兼容问题
- axurerp
- Guava学习笔记:Optional优雅的使用null