Leetcode131题分割回文串
题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
解题思路
首先很明显这题会使用到回溯法。在使用回溯法之前,需要另写一个函数来判定一个字符串是否是回文串。
接着在回溯法的过程中,设一个index表示字符串已经分割到的位置,然后对不同长度的子串进行判断。
此题比较简单,不多分析,直接贴代码。
class Solution {
public:
bool ishuiwen(string s)
{
int len=s.size();
for(int i=0;i<len/2;i++)
{
if(s[i]!=s[len-1-i]) return false;
}
return true;
}
vector<vector<string>> partition(string s) {
vector<string>a;
vector<vector<string>>b;
solve(a,b,s,0);
return b;
}
void solve(vector<string>& a,vector<vector<string>>& b,string s,int index)
{
if(index==s.size())
{
b.push_back(a);
return;
}
for(int len=1;len<=s.size();len++)
{
if((index+len-1)>=s.size()) return;
string tmp=s.substr(index,len);
if(ishuiwen(tmp))
{
a.push_back(tmp);
solve(a,b,s,index+len);
a.pop_back();
}
}
}
};
然而时间和空间的开销不是很乐观,希望大佬能给点建议。