当前位置: 首页 > article >正文

Leetcode 131.分割回文串 回溯 C++实现

Leetcode 131. 分割回文串

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

算法:

创建二维返回数组 ans ,和临时数组 path

进入 dfs 函数,当 i==n 时,证明已经递归到最后一个元素,执行完就可以 return 。从 i 到末尾,如果是回文就加入到 path 数组中,然后进入下一层递归。递归结束后将 path 存入返回数组 ans 中,最后恢复现场准备进入下一次递归。

代码:

class Solution {
    // 判断是否是回文字符串
    bool isPalindrome(string& s,int left,int right){
        while(left < right)
            if(s[left++] != s[right--]) return false;
        return true;
    }
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>> ans;// 返回数组ans
        vector<string> path;// 临时数组path
        int n = s.length();// 字符串s的长度n

        auto dfs = [&](auto&& dfs,int i){
            if(i == n){// 结束
                ans.emplace_back(path);
                return ;
            }
            for(int j = i;j < n;j++){
                if(isPalindrome(s,i,j)){
                    path.push_back(s.substr(i,j - i + 1));
                    dfs(dfs,j + 1);// 进入下一层递归
                    path.pop_back();// 恢复现场
                }
                // 如果不满足回文条件,不能return,要继续向后加字母。例如efe这个字符串,ef 不满足条件,但是向后加字母到 efe 就又满足了
            }
        };
        dfs(dfs,0);// 递归入口
        return ans;
    }
};

p.s. string.substr( a , b )    :   从 string 的第 a 个位置开始,连续读取 b 个数量的字符。


http://www.kler.cn/a/281885.html

相关文章:

  • 3D Streaming 在线互动展示系统:NVIDIA RTX 4090 加速实时渲染行业数字化转型
  • 华为刷题笔记--题目索引
  • Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC
  • 4.2 Android NDK 基础概念
  • 使用WebSocket技术实现Web应用中的实时数据更新
  • 直接映射4条 cacheline,每条cacheline32位数据(混乱版)
  • 淘宝扭蛋机小程序,市场发展下的潜在机遇
  • Vue(三)内置指令v-text、html、cloak、once、pre;自定义指令的三种方式、Vue生命周期
  • 如何切换当前使用的IP代理协议
  • 【网络安全】服务基础第一阶段——第二节:Windows系统管理基础----虚拟化IP地址以及用户与组管理
  • 一起搭WPF之列表界面设计
  • [每日一练]查询结果的质量和占比(布尔值的灵活使用)
  • 猫咪掉毛如何清理?希喂、范罗士宠物空气净化器性能比拼
  • 嵌入式UI开发-lvgl+wsl2+vscode系列:11、SSD202移植运行评估demo程序
  • vue ref和reactive区别
  • 在发布您的插件之前,如何在 ONLYOFFICE 插件市场中进行测试?
  • 如何在Java爬虫中设置代理IP:详解与技巧
  • python使用多进程multiprocessing
  • Python运行时环境
  • 小程序自定义组件配合插槽和组件传值
  • C语言中的野指针
  • 深度强化学习算法(二)(附带MATLAB程序)
  • 【60天备战2024年11月软考高级系统架构设计师——第0天:详细规划与学习心得】
  • 软件设计原则之开闭原则
  • 序列化和反序列化,objectMapper 详解
  • C++ 当不同依赖有相同文件夹