当前位置:网站首页>分割回文串 DP+回溯 (LeetCode-131)
分割回文串 DP+回溯 (LeetCode-131)
2022-08-02 03:29:00 【clarkjs】
1. 问题描述:
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。
2. 示例:
示例 1:
输入:s = “aab”
输出:[[“a”,“a”,“b”],[“aa”,“b”]]
示例 2:
输入:s = “a”
输出:[[“a”]]
3. 题解:
我们可以将此题拆分为两个子问题:(1)如何判断一个字符串是不是回文串 (2)如何在所有子字符串中搜索出所有符合条件的回文串。
针对第二个问题,如果我们遍历每一个子字符串,依次判断是否为回文串,当然可以得到结果,但是这样显得非常愚昧~~ 这属于蛮力法,相当于没有学过算法。其实,回溯法就可以解决这个问题,我们按照蛮力法的思想依次遍历,唯一的区别就是每次push_back的时候判断一下是否为回文串,是则压入,然后继续向后递归(详见代码)。
而对于问题一,则使用DP算法求解,自底向上,根据更小的子问题和规划方程来得到更大的子问题,规划方程如下:f[i][j] = (s[i] == s[j]) && f[i + 1][j - 1];即当 i+1 ~ j-1字符串为回文串,且 i 号元素等于 j 号元素时,i ~ j 也为回文串。
4. 代码:
class Solution {
private:
vector<vector<int>> f;
vector<vector<string>> ret;
vector<string> ans;
int n;
public:
void dfs(const string& s, int i) {
if (i == n) {
ret.push_back(ans);
return;
}
for (int j = i; j < n; ++j) {
if (f[i][j]) {
ans.push_back(s.substr(i, j - i + 1));
dfs(s, j + 1);
ans.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
n = s.size();
f.assign(n, vector<int>(n, true));
for (int i = n - 1; i >= 0; --i) {
for (int j = i + 1; j < n; ++j) {
f[i][j] = (s[i] == s[j]) && f[i + 1][j - 1];
}
}
dfs(s, 0);
return ret;
}
};

边栏推荐
- Case | industrial iot solutions, steel mills high-performance security for wisdom
- MIPI解决方案 ICN6202:MIPI DSI转LVDS转换芯片
- 将ORCAD原理图导入allegro中进行PCB设计
- 一文理解分布式开发中的服务治理
- 目标检测(一):R-CNN系列
- 如何快速搭建属于自己的物联网平台?
- 【心率传感器与Arduino连接读取心率数据】
- 【Popular Science Post】UART Interface Communication Protocol
- Arduino点亮数码管
- AD PCB导出Gerber文件(非常详细的步骤)
猜你喜欢
随机推荐
机器学习相关 概率论重点笔记
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
USB_ID介绍
78XX 79XX多路输出电源
Acwing:哈夫曼树(详解)
Comparative analysis of OneNET Studio and IoT Studio
出差电子流应用实战
兼容C51与STM32的Keil5安装方法
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
HDMI转MIPI CSI东芝转换芯片-TC358743XBG/TC358749XBG
火焰传感器与 Arduino 连接
树莓派入门(1)系统镜像烧录
【Arduino connects DHT11 humidity and temperature sensor】
[Spark]-协同过滤
【霍尔效应传感器模块与 Arduino】
《scala 编程(第3版)》学习笔记2
Comparative analysis of mobile cloud IoT pre-research and Alibaba Cloud development
【科普贴】UART接口通讯协议
写博客的原因。
Typora use









