Leetcode 131 Palindrome Partition

题意

把一个字符串分割成多个回文字符串的partition,返回所有的可能partion

链接

https://leetcode.com/problems/palindrome-partitioning/description/

思考

这只是dfs套了一个回文问题

题解

dfs每次截取一段字符串,判断是否是回文

退出条件是遍历到末尾了

dfs传入起始位置u, 从第u位开始截取字符串,一直到末尾,末尾有个指针i。一旦发现是回文了就可以继续截取回文。下一个dfs是从第i+1开始

cpp 复制代码
class Solution {
public:
    vector<vector<string>> res;
    vector<vector<string>> partition(string s) {
        vector<string> tmp;
        dfs(0, s, tmp);
        return res;
    }
    void dfs(int u, string s, vector<string>& tmp) {
        if( u == s.size()) {
            res.push_back(tmp);
        }
        for(int i = u; i < s.size(); i++) {
            if(isPalidrome(s, u, i)) {
                string tmpStr = s.substr(u, i-u+1);
                tmp.push_back(tmpStr);
                dfs(i+1, s, tmp);
                tmp.pop_back();
            }
        }
    }
    bool isPalidrome(string s, int u, int i) {
        int l = u;
        int r = i;
        while(l < r) {
            if(s[l] == s[r]) {
                l++;
                r--;
            } else {
                return false;
            }
        }
        return true;
    }
};

时间复杂度 O ( n ∗ 指数级别 ) O(n*指数级别) O(n∗指数级别)

空间复杂度 O ( n ) O(n) O(n)

相关推荐
落魄君子41 分钟前
SVM分类-支持向量机(Support Vector Machine)
神经网络·算法·支持向量机·分类
上理考研周导师2 小时前
【单片机原理】第1章 微机基础知识,运算器,控制器,寄存器,微机工作过程,数制转换
算法
IT猿手3 小时前
基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码
算法·elk·机器学习·matlab·无人机·聚类·强化学习
m0_675988238 小时前
Leetcode2545:根据第 K 场考试的分数排序
python·算法·leetcode
破-风8 小时前
leetcode---mysql
算法·leetcode·职场和发展
Wils0nEdwards8 小时前
Leetcode 合并两个有序链表
算法·leetcode·链表
eternal__day10 小时前
数据结构十大排序之(冒泡,快排,并归)
java·数据结构·算法
姚先生9710 小时前
LeetCode 35. 搜索插入位置 (C++实现)
c++·算法·leetcode
Theodore_102210 小时前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
阿华的代码王国11 小时前
【算法】栈
数据结构·算法·leetcode·