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

分割回文串 (leetcode 131

leetcode系列

文章目录

  • 一、核心操作
  • 二、外层配合操作
  • 三、核心模式代码
  • 总结


先遍历字符串形成一个表,后续根据要判断的字符串首尾来查表即可获得结果,降低时间复杂度

一、核心操作

  1. 建立表函数:一个二维表,分别为字符串的开头和结尾,初始化后第一层遍历要倒过来,这样在保证在计算第i行时, i+1行已经计算好了,然后内层正常循环。当ij相等时肯定为true,因为此时就一个字母;当j=i+1时,如果s[i]和s[j]相等,也是回文串,当其他的情况时,如果s[i]和s[j]相等,就需要查之前的表,当s[i+1]和s[j-1]相等,才能将这一格赋为true
  2. 回溯函数:当到了最后一层,也就是startIndex为s.size(),则可以收获,而在每一层的循环中,首先判断从startIndex到i的字符串是不是回文串,不是就continue,如果是则将其存进路径,进行递归和回溯

提示:小白个人理解,如有错误敬请谅解!

二、外层配合操作

  1. 分别调用两个函数

三、核心模式代码

代码如下:

class Solution {
public:
    vector<vector<string>> res;
    vector<string> path;
    vector<vector<bool>> isPalindrome;
    void getPalindrome(string& s)
    {
        isPalindrome.resize(s.size(),vector<bool>(s.size(),false));
        for(int i=s.size()-1;i>=0;i--)
        {
            for(int j=i;j<s.size();j++)
            {
                if(j==i)isPalindrome[i][j]=true;
                else if(j-1==i){isPalindrome[i][j]=(s[i]==s[j]);}
                else {isPalindrome[i][j]=(s[i]==s[j] && isPalindrome[i+1][j-1]);}
            }
        }   
    }
    void backTracking(string& s, int startIndex)
    {
        if(startIndex==s.size())
        {
            res.push_back(path);
            return;
        }
        for(int i=startIndex;i<s.size();i++)
        {
            
            if(!isPalindrome[startIndex][i])continue;
            string ss=s.substr(startIndex,i-startIndex+1);
            path.push_back(ss);
            backTracking(s,i+1);
            path.pop_back();
        }
    }
    vector<vector<string>> partition(string s) {
        if(!s.size())return res;
        getPalindrome(s);
        backTracking(s,0);
        return res;
    }
};

总结

相关文章:

  • 视频孪生与三维视频融合:重构工业现场的“数字视网膜“
  • 002-告别乱码-libiconv-C++开源库108杰
  • 2025年特种设备作业人员叉车司机考试练习题
  • 【网络协议详解】——BGP/MPLS IP VPN技术(学习笔记)
  • macOS 安装配置 iTerm2 记录
  • 亚远景-企业如何通过ASPICE评估:汽车软件开发的实践指南
  • 小程序SSL证书过期怎么办?
  • python之replace,strip,split命令
  • ai agent开发实例
  • Mysql 的 Query Cache为什么被废弃
  • 设计一个优秀 API 的秘诀
  • HAMSTER: HIERARCHICAL ACTION MODELS FOR OPEN-WORLD ROBOT MANIPULATION
  • 2.4 基于Vitest的单元测试基础设施搭建
  • AutoGen学习笔记系列(十)Advanced - Swarm
  • 大湾区经济网报道:全国已有103个统筹地区实施医保基金即时结算
  • Ubuntu 22.04 安装配置 FTP服务器 教程
  • Vue3的基本使用
  • Nginx 服务器,Apache 服务器,IIS 服务器的区别
  • 【测试语言基础篇】Python基础之List列表
  • Vim多模式编辑器的三种模式和常用命令集
  • 纪念|脖子上挂着红领巾的陈逸飞
  • 上海:到2027年,实现近海航线及重点海域5G网络高质量覆盖
  • 自然资源部:不动产登记累计化解遗留问题房屋2000多万套
  • 南京江宁区市监局通报:盒马一批次猕猴桃检出膨大剂超标
  • 王征、解宁元、牛恺任西安市副市长
  • 今年前4个月上海对拉美国家进出口总值增长2%