赞
踩
题目:
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是
回文串
。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a" 输出:[["a"]]
难点:这里用到一个很取段的思路,其实和取点的内容差不多,但是取端更难理解。
思路:直接看回溯函数的内容,首先我们是取段的,如果这一段不行那就往后面加1,直到加道循环结束。然后就被pop掉。如果可以取端,并且取到了最后一段,也就是开始的startIndex大于等于size那么就代表这一条都是回文字符串。然后需要一个判断函数,判断字符串是否为回文字符串,如果是往path里面加。
学到的新函数:array.substr( a ,b) a表示字符串的开始,b表示数量 含义:选取字符串array从a开始往后的b个数
看代码:
- class Solution {
- private:
- vector<vector<string>> result;
- vector<string> path;
- void backtraking(string s,int startIndex)
- {
- if(startIndex > s.size()-1)
- {
- result.push_back(path);
- return;
- }
- for(int i = startIndex;i < s.size();i++)
- {
- if(check(s,startIndex,i))
- {
- string str = s.substr(startIndex,i-startIndex+1);
- path.push_back(str);
- }
- else {continue;}
- backtraking(s,i+1);
- path.pop_back();
- }
- }
- bool check(string s,int a,int b)
- {
- int left = a;
- int right = b;
- for(; left < right; left++,right--)
- {
- if(s[left] != s[right])return false;
- }
- return true;
- }
-
-
- public:
- vector<vector<string>> partition(string s)
- {
- backtraking(s,0);
- return result;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。