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

LeetCode131:分割回文串

题目链接:131. 分割回文串 - 力扣(LeetCode)

代码如下:

class Solution {
private:
    vector<vector<string>> result;
    vector<string> path; // 放已经回文的子串
    void backtracking (const string& s, int startIndex) {
        // 如果起始位置已经大于s的大小,说明已经找到了一组分割方案了
        if (startIndex >= s.size()) {
            result.push_back(path);
            return;
        }
        for (int i = startIndex; i < s.size(); i++) {
            if (isPalindrome(s, startIndex, i)) {   // 是回文子串
                // 获取[startIndex,i]在s中的子串
                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;
    }
};

这个题目其实就是需要去做一个分割操作,用什么来表示分割的线呢?其实就是startindex这个值。当把这个回溯抽象成一棵树的时候,我们不难看出来,这个题目需要对于分割的把握严格。

回溯三步走:

参数的设定:这里需要string s, startindex这两个就好

结束条件:如果你当先的分割线已经大于s这个字符串的大小了,那么就可以退出来了

单层循环语句:这个就是从你分割的这个位置开始去遍历,用i++来往后面去判断这个是否回文

最后:还需要编写一个回文的函数。


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

相关文章:

  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • 46并发编程(线程、进程)
  • 深入解析生成对抗网络(GAN)
  • Django一分钟:django中收集关联对象关联数据的方法
  • 量化加速知识点(整理中。。。)
  • SparkContext讲解
  • STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)
  • C语言-11-18笔记
  • 利用开源的低代码表单设计器FcDesigner高效管理和渲染复杂表单结构
  • 网络层8——IP多播
  • 论文复现_How Machine Learning Is Solving the Binary Function Similarity Problem
  • mapStruct详解
  • docker部署redis7
  • 说一说JS伪数组和数组的区别?
  • 云原生基础-云计算概览
  • 算法-二分查找2(代码笔记)
  • 在 Ubuntu 上配置防火墙以开放特定端口
  • 【Redis_Day5】String类型
  • Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
  • SQL面试题——交叉窗口计算
  • es执行_update_by_query要注意
  • Mac系统下配置 Tomcat 运行环境
  • 基于边缘计算技术的机器状态监测系统
  • 2024年11月17日Github流行趋势
  • 数据库视图-多表
  • 力扣题解(新增道路查询后的最短距离II)