Day66 代码随想录打卡|回溯算法篇---分割回文串

题目(leecode T131):

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。

方法:本题是一个分割回文串的问题,是回溯算法的另一类问题。 针对一个字符串,我们要对其进行分割,并且确保分割后生成的子串也必须全都是回文串。分析回溯三部曲

1:传入参数与返回值:传入字符串s,以及切割的起始位置startIndex,不需要返回值

2:终止条件:因为切割位置startIndex控制的是切割的起始位置,当startIndex大于等于s.size时,就意味着已经切到了最后,也就该停止了。

3:单层处理逻辑:在单层中我们需要从字符串中截取子串。

for (int i = startIndex; i < s.size(); i++)循环中,我们 定义了起始位置startIndex,那么 [startIndex, i] 就是要截取的子串。

首先判断这个子串是不是回文,如果是回文,就加入在vector<string> path中,path用来记录切割过的回文子串。

题解:
 

class Solution {
private:
    vector<string> path;
    vector<vector<string>> result;
    void backtracking(const string& s,int startIndex){
        if(startIndex >= s.size()){             //终止条件
            result.push_back(path);
            return;
        }
        for(int i = startIndex; i < s.size(); i++){
            if(isPalindrome(s, startIndex, i)){
                string str = s.substr(startIndex, i - startIndex + 1);
                path.push_back(str);
            }else{
                continue;
            }
            backtracking(s, i + 1); // 寻找i+1为起始位置的子串
            path.pop_back(); // 回溯过程,弹出本次已经添加的子串
        }
    }
    bool isPalindrome(const string& s, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            if (s[i] != s[j]) {
                return false;
            }
        }
        return true;
    }
public:
    vector<vector<string>> partition(string s) {
        result.clear();
        path.clear();
        backtracking(s, 0);
        return result;
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 00:48:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 00:48:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 00:48:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 00:48:04       69 阅读

热门阅读

  1. 【Git】本地版本控制

    2024-07-11 00:48:04       24 阅读
  2. 【Cookie 在 Spring Boot 中的实现】

    2024-07-11 00:48:04       21 阅读
  3. SQL的时间格式和文本灵活转换

    2024-07-11 00:48:04       27 阅读
  4. ubuntu22 设置开机直接登录桌面

    2024-07-11 00:48:04       22 阅读
  5. Sqlmap中文使用手册 - Options模块参数使用

    2024-07-11 00:48:04       17 阅读
  6. GIT基本概念以及简单使用方法

    2024-07-11 00:48:04       23 阅读
  7. SQL注入如何判断数据库类型

    2024-07-11 00:48:04       25 阅读
  8. 什么是引用

    2024-07-11 00:48:04       24 阅读
  9. 如何从Git仓库中删除大文件并解决推送错误方案

    2024-07-11 00:48:04       23 阅读
  10. Git删除了文件拉取时失败

    2024-07-11 00:48:04       22 阅读
  11. 学习测试练习题

    2024-07-11 00:48:04       24 阅读
  12. QT log日志

    2024-07-11 00:48:04       29 阅读
  13. Angular页面项目以HTTPS方式启动调试

    2024-07-11 00:48:04       22 阅读