LeetCode 131 —— 分割回文串

news/2024/9/24 23:40:36/

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

1. 题目

2. 解题思路

首先,按照 LeetCode 5——最长回文子串 中的思路,我们先求出 d p dp dp,这样我们就知道了所有的子串是否是回文子串。

然后,我们进行一个 dfs 搜索,起始为 0 0 0,如果 d p [ 0 ] [ i ] dp[0][i] dp[0][i] 是回文子串,那么我们就在第 i i i 个位置进行第一次分割。

然后起始变为 i + 1 i+1 i+1,如果 d p [ i + 1 ] [ j ] dp[i+1][j] dp[i+1][j] 是回文子串,那么我们就在第 j j j 个位置进行第二次分割。

以此类推,直到把整个字符串切割完毕,就得到了其中的一个分割方案。

最坏的情况下,字符串中所有的字符都相等,那么怎么分割都是对的,假设字符串长度为 n n n,总共的分割方案有:

C n 1 + C n 2 + . . . + C n n − 1 = 2 n C^1_n+C^2_n+...+C^{n-1}_n=2^n Cn1+Cn2+...+Cnn1=2n

可以切割的次数为 1 1 1 n − 1 n-1 n1,然后在每个切割次数下,切割位置可以任意选择。而每一个切割方案我们都需要遍历字符串一次,时间复杂度为 O ( n ) O(n) O(n),所以,算法的整体时间复杂度为 O ( n ⋅ 2 n ) O(n \cdot 2^n) O(n2n),空间复杂度为 O ( n 2 ) O(n^2) O(n2)

3. 代码实现

class Solution {
public:vector<vector<string> > ret;void dfs(vector<vector<bool> >& dp, string& s, vector<string>& partition_s, int start) {for (int i = start; i < s.size(); ++i) {if (dp[start][i]) {partition_s.push_back(s.substr(start, i-start+1));if (i == s.size()-1) {ret.push_back(partition_s);partition_s.pop_back();return;}dfs(dp, s, partition_s, i+1);partition_s.pop_back();}}}vector<vector<string>> partition(string s) {int n = s.size();vector<vector<bool> > dp(n, vector<bool>(n, false));for (int i = 0; i < n; ++i) {for (int j = i; j >= 0; --j) {dp[i][j] = true;}}for (int len = 1; len < n; ++len) {for (int i = 0; i < n - len; ++i) {if (s[i] == s[i+len] && dp[i+1][i+len-1]) {dp[i][i+len] = true;}}}vector<string> partition_s;dfs(dp, s, partition_s, 0);return ret;}
};

http://www.ppmy.cn/news/1451283.html

相关文章

(汇总)vue中在不同页面之间-4种传递参数的方式

Vue项目页面间传递参数和参数存储有很多种&#xff0c;常见的&#xff1a; &#xff08;参考链接&#xff1a;www.qinglite.cn/doc/4603647… url里加参数&#xff0c;比如&#xff1a;/find?idxxx&#xff0c;或/find/xxx&#xff0c;适合少量数据&#xff0c;优点是刷新页面…

企业计算机服务器中了lockbit勒索病毒如何处理,lockbit勒索病毒解密流程建议

在虚拟的网络世界里&#xff0c;人们利用网络获取信息的方式有很多&#xff0c;网络为众多企业提供了极大便利性&#xff0c;也大大提高了企业生产运营效率&#xff0c;方便企业开展各项工作业务。但随着网络技术的不断发展与应用&#xff0c;越来越多的企业开始关注企业网络数…

SMB 协议详解之-TreeID原理和SMB数据包分析技巧

在前面分析SMB协议数据包的过程中,这里,可以看到在SMB协议中存在很多的ID,即Unique Identifiers。那么这些ID表示什么含义?在实际分析数据包的过程中如何根据这些ID进行过滤分析?本文将介绍SMB/SMB2中的tree id ,并介绍如何通过tree id 快速的分析SMB数据包中各种命令交互…

本地基于知识库的大模型的使用教程

本地基于知识库的大模型的使用教程 启动 双击 大模型启动.bat文件&#xff0c;内容如下&#xff1a; cmd /k "cd /d G:\Anaconda3\Scripts && activate.bat && cd /d D:\docdb_llm && conda activate python3.11 && python startup.py…

如何解决Go中uint类型溢出问题

如何解决Go中uint类型溢出问题 Golong的uint类型溢出问题通常会发生在大量的运算中&#xff0c;特别是涉及到大量循环和大数运算中。当uint类型的值超过其最大值时&#xff0c;会发生溢出&#xff0c;从最小值开始循环&#xff0c;一般有如下几种解决办法&#xff1a; 1. 使用…

wordpress外贸独立站建站10要10不要

创建一个成功的WordPress外贸独立站需要注意很多因素。以下是zhanyes根据多年建站经验总结的wordpress外贸独立站建站的10个建议和10个避免的事项&#xff0c;以帮助您建立一个高质量的外贸网站&#xff1a; 10个要&#xff1a; 1. 要选择合适的域名&#xff1a;确保您的域名…

感应开关盖垃圾桶项目(二)

单片机中断 之前我们采用软件的方法实现&#xff0c;对爆表的次数进行统计&#xff0c;以达到我们的延时要求。我们也可以采取中断的方法&#xff0c;让硬件直接实现中断。 观察中断结构图可以发现只有当EA闭合的时候&#xff0c;才会接受中断信号&#xff0c;之后可以按照我…

如何在postman上提交文件格式的数据

如何在postman上提交文件格式的数据 今天在写一个文件上传的功能接口时&#xff0c;想用postman进行提交&#xff0c;花了些时间才找到在postman提交文件格式的数据。记录一下吧&#xff01; 1.打开postman&#xff0c;选择POST提交方式&#xff0c;然后在Params那一行的Head…