Palindrome Partitioning解题报告
来源:互联网 发布:淘宝卖白酒可以吗 编辑:程序博客网 时间:2024/05/17 02:45
https://leetcode.com/problems/palindrome-partitioning/
一般这种求全部排列的都是用DFS+backtracing解决。但是求s[i…j]是否是回文,如果将字符串倒序,然后判断,难免太浪费时间。可以先用动态规划求解然后再进行回溯。回溯的思想就是从一个位置出发,依次对其后的位置进行substr截取,判断是否为回文串,然后再从该位置出发继续进行判断。回溯剪枝的条件是不是回文字符串。
动态规划的思想是:
palind[i][j]=palind[i+1][j-1]&&s[i]==s[j]
这里需要注意的是对于下标i是i+1,表示i位置依赖于i+1的判断,所以下标i的方向是从大向小,而j的判断依赖于j-1所以j的下标位置是从小向大的。
动归部分代码:
for(int i=n-1;i>=0;i--){ for(int j=i;j<n;j++){ if((i+1>=j-1||palind[i+1][j-1])&&s[i]==s[j]) palind[i][j]=true; }}整体部分代码:
class Solution {private:vector<vector<string> > res;vector<string> subres;public: vector<vector<string>> partition(string s) { int n=s.size(); vector<vector<bool> > palind(n,vector<bool>(n,false)); for(int i=n-1;i>=0;i--){ for(int j=i;j<n;j++){ if((i+1>=j-1||palind[i+1][j-1])&&s[i]==s[j]) palind[i][j]=true; } } getPartition(s,0,palind); return res; } void getPartition(string &s,int start,vector<vector<bool> > palind){ if(start==s.size()){ res.push_back(subres); return; } for(int i=start;i<s.size();i++){ if(palind[start][i]){ subres.push_back(s.substr(start,i-start+1)); getPartition(s,i+1,palind); subres.pop_back(); } } }};
0 0
- Palindrome Partitioning解题报告
- [LeetCode]Palindrome Partitioning,解题报告
- 【LeetCode】Palindrome Partitioning 解题报告
- 【LeetCode】Palindrome Partitioning II 解题报告
- [leetcode] 131. Palindrome Partitioning 解题报告
- [leetcode] 132. Palindrome Partitioning II 解题报告
- [Leetcode] 131. Palindrome Partitioning 解题报告
- [Leetcode] 132. Palindrome Partitioning II 解题报告
- leetCode解题报告之Palindrome Partitioning I,II(DFS,DP)
- leetCode解题报告之Palindrome Partitioning I,II(DFS,DP)
- leetCode解题报告之Palindrome Partitioning I,II(DFS,DP)
- leetcode解题笔记-Palindrome Partitioning
- Palindrome Partitioning II 解题心得
- POJ 1159 Palindrome 解题报告
- [LeetCode]Palindrome Number,解题报告
- LeetCode-Shortest Palindrome-解题报告
- LeetCode解题报告--Palindrome Number
- [LeetCode] Palindrome Number 解题报告
- Android:inflate方法的用法
- 表单验证 正则表达式
- 网站分析流程
- C++的STL中accumulate的用法
- iOS开发 打电话功能(包括系统内与系统外)
- Palindrome Partitioning解题报告
- 使用模版的程序设计
- LinkedList源码分析
- Android ORM 框架之 greenDAO 使用心得
- Android greenDAO数据库配置教程
- 开发App之20问
- FFmpeg工具使用
- 开关电源防止EMI的22个设计技巧
- Android Service的整理