【练习】【回溯:分割】力扣131. 分割回文串

news/2025/2/26 2:02:15

题目

  1. 分割回文串

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

示例 1:

输入:s = “aab”

输出:[[“a”,“a”,“b”],[“aa”,“b”]]

示例 2:

输入:s = “a”

输出:[[“a”]]

来源:力扣131. 分割回文串


思路(注意事项)

start是分割线


纯代码

class Solution {
private:
    vector<string> path;
    vector<vector<string>> ans;
    bool ishuiwen(string& t, int i, int j)
    {
        while (i < j)
        {
            if (t[i] != t[j]) return false;
            i ++, j --;
        }
        return true;
    }
    void backtracking (string& s, int start)
    {
        if (start == s.size()) 
        {
            ans.push_back(path);
            return;
        }
        for (int i = start; i < s.size(); i ++)
        {
            
            if (ishuiwen(s, start, i)){
                string str = s.substr (start, i - start + 1);
                path.push_back(str);
            }
            else continue;
            
            backtracking (s, i + 1);
            path.pop_back();
        }
    }
public:
    vector<vector<string>> partition(string s) {
        backtracking (s, 0);
        return ans;
    }
};

题解(加注释)

class Solution {
private:
    vector<string> path;         // 存储当前分割路径
    vector<vector<string>> ans;  // 存储所有有效分割方案

    // 判断子串是否是回文
    bool ishuiwen(string& s, int i, int j) {
        while (i < j) {
            if (s[i] != s[j]) return false;  // 如果字符不相等,则不是回文
            i++, j--;  // 向中间移动指针
        }
        return true;  // 全部字符相等,是回文
    }

    // 回溯函数
    void backtracking(string& s, int start) {
        // 终止条件:分割到字符串末尾
        if (start == s.size()) {
            ans.push_back(path);  // 保存当前有效分割方案
            return;
        }

        // 遍历所有可能的分割点
        for (int i = start; i < s.size(); i++) {
            // 判断当前子串是否是回文
            if (ishuiwen(s, start, i)) {
                string str = s.substr(start, i - start + 1);  // 提取回文子串
                path.push_back(str);                          // 加入当前路径
                backtracking(s, i + 1);                       // 递归处理剩余部分
                path.pop_back();                              // 回溯,移除当前子串
            } else {
                continue;  // 如果当前子串不是回文,跳过后续操作
            }
        }
    }

public:
    vector<vector<string>> partition(string s) {
        backtracking(s, 0);  // 从第一个字符开始分割
        return ans;          // 返回所有有效分割方案
    }
};

http://www.niftyadmin.cn/n/5867068.html

相关文章

关于Postman自动获取token

在使用postman测试联调接口时&#xff0c;可能每个接口都需要使用此接口生成的令牌做Authorization的Bearer Token验证&#xff0c;最直接的办法可能会是一步一步的点击&#xff0c;如下图&#xff1a; 在Authorization中去选择Bearer Token&#xff0c;然后将获取到的token粘贴…

编写最简单flink应用并提交到flink v1.19.2集群

1 概述 本文介绍编写最最简单的word count的代码&#xff0c;编译成jar后&#xff0c;提交到flink v1.19.2集群进行运行。 2 环境准备 2.1 jdk和maven工具的安装 yum安装jdk 1.8&#xff1a; yum install java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64 java-1.8.0-ope…

业务应用和大数据平台的数据流向

概述 业务应用与大数据平台之间的交互是实现数据驱动决策和实时业务处理的关键环节。其交互方式多样&#xff0c;协议选择取决于数据流向、实时性要求及技术架构。一句话总结&#xff0c;数据流向可以是从业务应用写入大数据平台&#xff0c;也可以是大数据平台回写至业务应用…

计算机毕业设计SpringBoot+Vue.jst网上超市系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【无人集群系列---无人机集群编队算法】

【无人集群系列---无人机集群编队算法】 一、核心目标二、主流编队控制方法1. 领航-跟随法&#xff08;Leader-Follower&#xff09;2. 虚拟结构法&#xff08;Virtual Structure&#xff09;3. 行为法&#xff08;Behavior-Based&#xff09;4. 人工势场法&#xff08;Artific…

量子计算在金融风险评估中的应用:革新与突破

量子计算在金融风险评估中的应用:革新与突破 大家好,我是Echo_Wish,一名专注于人工智能和Python的自媒体创作者。今天,我们要探讨的是量子计算在金融风险评估中的应用。量子计算作为新一代计算技术,其超强的计算能力和并行处理能力,正在逐步改变金融风险评估的传统方法。…

vue3 下载文件 responseType-blob 或者 a标签

在 Vue 3 中&#xff0c;你可以使用 axios 或 fetch 来下载文件&#xff0c;并将 responseType 设置为 blob 以处理二进制数据。以下是一个使用 axios 的示例&#xff1a; 使用 axios 下载文件 首先&#xff0c;确保你已经安装了 axios&#xff1a; npm install axios然后在你…

国产编辑器EverEdit - 如何在EverEdit中创建工程?

1 创建工程 1.1 应用场景 工程是一个文件及文件夹的集合&#xff0c;对于稍微有点规模的项目&#xff0c;一般都会包含多个文件&#xff0c;甚至还会以文件夹的形式进行分层管理多个文件&#xff0c;为了方便的管理这个项目&#xff0c;可以将这些文件和文件夹保存为一个工程。…