分割回文串(回溯)
给你一个字符串 s
,请你将 s
分割成一些子串,使每个子串都是回文串。返回 s
所有可能的分割方案。
示例 1:
输入:s = "aab" 输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a" 输出:[["a"]]
class Solution { public: vector<vector<string>> res; vector<string> temp; bool check(string s){ int start=0; int end = s.size()-1; while(start<=end){ if(s[start]!=s[end]){ return false; } start++; end--; } return true; } void backtrack(string s,int start,int end){ if(start>end){ res.push_back(temp); return; } //分别截取长度为1,2,3...的子串进行验证,成功则用剩下的部分递归 for(int i=1;i<=end-start+1;i++){ if(check(s.substr(start,i))){//判断子串是否为回文串 temp.push_back(s.substr(start,i)); backtrack(s,start+i,end); temp.pop_back(); } } } vector<vector<string>> partition(string s) { backtrack(s,0,s.size()-1); return res; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探