【LeetCode-回溯】分割回文串
时间:2020-07-11
本文章向大家介绍【LeetCode-回溯】分割回文串,主要包括【LeetCode-回溯】分割回文串使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
题目链接: https://leetcode-cn.com/problems/palindrome-partitioning/
思路
由于是求所有可能分割情况,所以使用回溯来做。代码如下:
class Solution {
public:
vector<vector<string>> partition(string s) {
if(s.empty()) return {};
vector<vector<string>> ans;
vector<string> cur;
int start = 0;
dfs(s, start, cur, ans);
return ans;
}
void dfs(string s, int start, vector<string> cur, vector<vector<string>>& ans){
if(start>=s.size()){
ans.push_back(cur);
return;
}
for(int i=start; i<s.size(); i++){
string sub = s.substr(start, i-start+1);
if(judge(sub)){
cur.push_back(sub);
dfs(s, i+1, cur, ans);
cur.pop_back();
}
}
}
/*判断s是否是回文串,是返回true,不是返回false*/
bool judge(string s){
if(s.size()==1) return true;
int left = 0;
int right = s.size()-1;
while(left<right){
if(s[left]!=s[right]) return false;
left++;
right--;
}
return true;
}
};
使用下面的写法(多加了几个引用&
)可以将速度提升 4 倍:
class Solution {
public:
vector<vector<string>> partition(string s) {
if(s.empty()) return {};
vector<string> cur;
vector<vector<string>> ans;
int start = 0;
dfs(s, start, cur, ans);
return ans;
}
void dfs(string& s, int start, vector<string>& cur, vector<vector<string>>& ans){
if(start>=s.size()){
ans.push_back(cur);
return;
}
for(int i=start; i<s.size(); i++){
string sub = s.substr(start, i-start+1);
if(judge(sub)){
cur.push_back(sub);
dfs(s, i+1, cur, ans);
cur.pop_back();
}
}
}
/*判断s是否是回文串,是返回true,不是返回false*/
bool judge(string& s){
if(s.size()==1) return true;
int left = 0;
int right = s.size()-1;
while(left<right){
if(s[left]!=s[right]) return false;
left++;
right--;
}
return true;
}
};
原文地址:https://www.cnblogs.com/flix/p/13285615.html
- 蒙特卡洛算法及其实现
- 【专知-PyTorch手把手深度学习教程05】Dropout快速理解与PyTorch实现: 图文+代码
- 【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
- 【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
- BZOJ 3098: Hash Killer II(新生必做的水题)
- [接口测试 - 基础篇] 04 无法绕过的json解析
- 【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
- [接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
- 关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
- [linux][kernel]dump kmsg到文件系统中
- [接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法