【Palindrome Partitioning】cpp
题目:
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"]
]
代码:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > ret;
vector<string> tmp;
Solution::dfs(ret, tmp, s, , s.size()-);
return ret;
}
static void dfs(vector<vector<string> >& ret, vector<string>& tmp, string& s, int begin, int end)
{
if ( begin>end ) { ret.push_back(tmp); return; }
for ( int i = begin; i <= end; ++i )
{
if ( Solution::isPalindrome(s, begin, i) )
{
tmp.push_back(s.substr(begin,i-begin+));
Solution::dfs(ret, tmp, s, i+, end);
tmp.pop_back();
}
}
}
static bool isPalindrome(string& s, int begin, int end)
{
while ( begin<end && s[begin]==s[end] ) { begin++; end--; }
return begin>=end;
}
};
tips:
把问题转化为深搜:字符串s有n个字符,因此可以有n个切的位置(包括不切)。
按照深搜的模板写出来代码(dfs终止条件;深搜遍历条件等)。
注意一个细节,传入下一层dfs时是从i+1到end,之前一直写成了begin+1犯了低级错误。
深搜的时间复杂度为O(2^n) 空间复杂度为O(1)。
深搜在这道题上也有不足之处,很多子字符串是否是回文算过了不止一遍,自然联想能否用动规算法保存每一轮的判断结果。
====================================================
先往后走,后面再研究动态规划的做法。
==================================================
第二次过这道题,用dfs做的,其中每层里面i代表的是截取字符串的长度,自然由1到s.size()。
class Solution {
public:
vector<vector<string> > partition(string s)
{
vector<vector<string> > ret;
vector<string> tmp;
Solution::dfs(ret, tmp, s);
return ret;
}
static void dfs(vector<vector<string> >& ret, vector<string>& tmp, string s)
{
if ( s.size()< )
{
ret.push_back(tmp);
return;
}
for ( int i=; i<=s.size(); ++i )
{
if ( Solution::isPalindrome(s.substr(,i)) )
{
tmp.push_back(s.substr(,i));
Solution::dfs(ret, tmp, s.substr(i,s.size()-i));
tmp.pop_back();
}
}
}
static bool isPalindrome(string s)
{
int begin = ;
int end = s.size()-;
while ( begin<end )
{
if ( s[begin]!=s[end] ) return false;
begin++;
end--;
}
return true;
}
};
【Palindrome Partitioning】cpp的更多相关文章
- 【Palindrome Number】cpp
题目: Determine whether an integer is a palindrome. Do this without extra space. click to show spoiler ...
- 【palindrome partitioning II】cpp
题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
- hdu 4739【位运算】.cpp
题意: 给出n个地雷所在位置,正好能够组成正方形的地雷就可以拿走..为了简化题目,只考虑平行于横轴的正方形.. 问最多可以拿走多少个正方形.. 思路: 先找出可以组成正方形的地雷组合cnt个.. 然后 ...
- Hdu 4734 【数位DP】.cpp
题意: 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目给出a,b,求出0~ ...
- 【Scramble String】cpp
题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...
- 【Valid Sudoku】cpp
题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...
- 【Permutations II】cpp
题目: Given a collection of numbers that might contain duplicates, return all possible unique permutat ...
- 【Subsets II】cpp
题目: Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
- 【Sort Colors】cpp
题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
随机推荐
- linux nginx 404错误页面设置
配置nginx 实现404错误 返回一个页面 1.配置nginx.conf 在http代码块 添加 fastcgi_intercept_errors on; 2.在网站的sever代码块 添加 err ...
- sass相关随笔
安装 下载ruby并且安装 点击这里 打开命令行输入 gem install sass 我使用的是sublime text3 还需要下载三个插件 sass -- 可以帮助你语法高亮 sass buil ...
- 画报表框架——Echarts.js
官网:http://echarts.baidu.com/index.html ————————————————————————————————— 先看看我做的第一个柱状图形报表 ——————————— ...
- MongoDB-2.6.0 (OpenLogic CentOS7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: mongodb basic software database linux open source 服务优惠价: 按服务商许可协议 云服务器费用:查 ...
- ADS主要仿真器介绍
ADS主要仿真器介绍 ADS ( Advanced Design System ) 是美国Agilent公司推出的电路和系统分析软件,它集成多种仿真软件的优点,仿真手段丰富多样,可实现包 ...
- 基于PowerShell的Lync Server管理 使用C#
这里所说的Lync Server管理,指通过C#管理Lync账号的启用,禁用,开启账户的语音功能. Lync服务器安装后,会自动创建一个用于远程管理的应用程序,通过IIS查看,其应用程序名为: Lyn ...
- vue系列(一)子组件和父组件
父组件传递数据到子组件props 父组件 <template> <div class="main"> <div class="top&quo ...
- pta 编程题14 Huffman Codes
其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...
- 关于wp8.1 runtime模式下面的摄像头调用拍照问题和应用生命周期问题
现在的msdn文档,还找不到详细的wp8.1的摄像头拍照文档,只有一个序列拍照,类似九连拍的文档,而且这文档感觉就是windows8.1搬过来应付的,wp8.1模式,只要有一个地方处理不好,手机就会死 ...
- Android(java)学习笔记81:在TextView组件中利用Html插入文字或图片
1. TextView中利用Html插入文字或者图片: 首先我们看看代码: (1)activity_main.xml: <LinearLayout xmlns:android="htt ...