【leetcode】131. Palindrome Partitioning

题目:

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"]
  ]
翻译:

将一个字符串进行分割,使得其所有的子字符串均为回文字符串,返回其所有的分割结果。

分析:

本题用递归即可,不过这个递归稍微有些复杂。还需要写一个判断字符串是否为回文字符串的函数。每次都将一个字符放到字符串temp里,判断temp是否为回文字符,如果该字符串是回文字符串,那么将该字符串放到result里,并且进行下一次递归。当位置i>=s.size()时,将result的结果加入到results里。有一个需要额外注意的地方,在每次递归结束之后,需要将result进行还原,具体可以结合代码进行理解。

代码:

class Solution {
public:
	vector<vector<string>> partition(string s) {
		vector<vector<string>> results;
		vector<string> result;
		if(s.size()==0)
			return results;
		palindrome_search(results,result,s,0);
		return results;
	}
	void palindrome_search(vector<vector<string>>& results,vector<string>& result,string &s,int i)
	{
		if (!(i<s.size()))
		{
			results.push_back(result);
			return;
		}
		string temp;
		while (i<s.size())
		{
			temp.push_back(s[i]);
			i++;
			if (palindrome_judge(temp))
			{
				result.push_back(temp);
				palindrome_search(results,result,s,i);
				result.pop_back();//还原上一次的结果
			}
		}
	}
	bool palindrome_judge(string str)
	{
		string temp=str;
		reverse(temp.begin(), temp.end());
		return str==temp;
	}
};
结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值