【回溯】【回文字符串】131.分割回文串

news2024/10/6 6:46:24

题目

法1:DFS+双指针

必须掌握基础方法!
注意:使用ArrayList删除尾元素比LinkedList要快很多!!!

class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        if (s.length() == 0) {
            return res;
        }
        List<String> tmp = new ArrayList<>();
        dfs(s, 0, tmp, res);

        return res;
    }

    public void dfs(String s, int startIndex, List<String> tmp, List<List<String>> res) {
        if (startIndex == s.length()) {
            res.add(new ArrayList<>(tmp));
            return;
        }
        for (int i = startIndex; i < s.length(); ++i) {
            if (!valid(s, startIndex, i)) {
                continue;
            }
            tmp.add(s.substring(startIndex, i + 1));
            dfs(s, i + 1, tmp, res);
            tmp.remove(tmp.size() - 1);
        }
    }

    public boolean valid(String s, int startIndex, int endIndex) {
        while (startIndex <= endIndex) {
            char left = s.charAt(startIndex);
            char right = s.charAt(endIndex);
            if (left != right) {
                return false;
            }
            ++startIndex;
            --endIndex;
        }

        return true;
    }
}

法2:DFS+回文串判断预处理

主要优化回文串判断部分
在这里插入图片描述

class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        int n = s.length();
        if (n == 0) {
            return res;
        }
        boolean[][] valid = new boolean[n][n];
        List<String> tmp = new ArrayList<>();
        for (int i = 0; i < n; ++i) {
            Arrays.fill(valid[i], true);
        }
        for (int i = n - 1; i >= 0; --i) {
            for (int j = i + 1; j < n; ++j) {
                valid[i][j] = (s.charAt(i) == s.charAt(j)) && valid[i + 1][j - 1];
            }
        }
        dfs(s, 0, tmp, res, valid);

        return res;
    }

    public void dfs(String s, int startIndex, List<String> tmp, List<List<String>> res, boolean[][] valid) {
        if (startIndex == s.length()) {
            res.add(new ArrayList<>(tmp));
            return;
        }
        for (int i = startIndex; i < s.length(); ++i) {
            if (valid[startIndex][i] == false) {
                continue;
            }
            tmp.add(s.substring(startIndex, i + 1));
            dfs(s, i + 1, tmp, res, valid);
            tmp.remove(tmp.size() - 1);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/12 拜个师傅带你学算法写论文

文章目录 1. 自我介绍2. 你是否遇到如下问题3. 解决方案4. Tips5. 同学的学习历程&#xff08;每日更新&#xff09;2023/12/18 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或CSDN滴滴我 1. 自我介绍 本人是985大学计算机硕…

【AIGC重塑教育】AI大模型驱动的教育变革与实践

文章目录 &#x1f354;现状&#x1f6f8;解决方法✨为什么要使用ai&#x1f386;彩蛋 &#x1f354;现状 AI正迅猛地改变着我们的生活。根据高盛发布的一份报告&#xff0c;AI有可能取代3亿个全职工作岗位&#xff0c;影响全球18%的工作岗位。在欧美&#xff0c;或许四分之一…

天猫数据分析-天猫分析工具-天猫数据在哪里看-11月天猫宝宝辅食行业销售分析报告

随着居民可支配收入的增长&#xff0c;家长对宝宝健康的关注程度也随之上涨&#xff0c;尽管出生率下降&#xff0c;但越来越多的家长逐渐认可外购辅食的价值&#xff0c;因此辅食也逐渐“刚需化”&#xff0c;辅食市场也保持着较大的市场规模。 根据鲸参谋电商数据分析平台的相…

【MySQL】 表的操作

// 创建表 create table 表名();// 查看表结构 desc 表名;// 新增一列表信息 alter table 表名 add 字段名 字段类型 (after 原表某一字段名);// 删除一列表信息 alter table 表名 drop 字段名;// 修改表字段名字 alter table 表名 change 原字段名 新字段名 类型; // 新字…

Ubuntu安装ARM交叉编译器

Ubuntu安装交叉编译器 更新apt # 更新apt sudo apt update安装gcc sudo apt install build-essential查看gcc版本 gcc -v下载交叉编译工具 复制到用户目录 解压 tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz移动到/opt/下 sudo ./gcc-linaro-5.…

分享一个好看的vs主题

最近发现了一个很好看的vs主题&#xff08;个人认为挺好看的&#xff09;&#xff0c;想要分享给大家。 主题的名字叫NightOwl&#xff0c;和vscode的主题颜色挺像的。操作方法也十分简单&#xff0c;首先我们先在最上面哪一行找到扩展。 然后点击管理扩展&#xff0c;再搜索栏…

机器学习——支持向量机

目录 一、基于最大间隔分隔数据 二、寻找最大间隔 1. 最大间隔 2. 拉格朗日乘子法 3. 对偶问题 三、SMO高效优化算法 四、软间隔 五、SMO算法实现 1. 简化版SMO算法 2. 完整版SMO算法 3. 可视化决策结果 六、核函数 1. 线性不可分——高维可分 2. 核函数 …

【Proteus仿真】【Arduino单片机】视力保护仪

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD16…

读书心得(表达式与基本语句篇)

内容取自《高质量C/C编程指南》 读者可能怀疑&#xff1a;连 if、for、while、goto、switch 这样简单的东西也要探讨编程风格&#xff0c;是不是小题大做&#xff1f;我真的发觉很多程序员用隐含错误的方式写表达式和基本语句&#xff0c;我自己也犯过类似的错误。表达式和语句…

共同编辑文档功能实现(websocket)

目录 前言 websocket封装 wangeditor下载 共同编辑文档代码实现 HTML样式部分 JS部分 css部分 前言 功能&#xff1a;实现文档共同编辑功能&#xff0c;可以实时接收到其他人的信息 思路&#xff1a;先调用接口获取相应的数据进行渲染&#xff0c;然后通过webSocket建…

Adaptive IBC :异构链互操作性的颠覆者

2024年第一季度&#xff0c;隐私协议 Secret Network 将会使用 Octopus Network 基于 Adaptive IBC 技术路线开发的 NEAR IBC&#xff0c;实现与 NEAR Protocol 之间将会实现首次跨链交互&#xff0c;这同样是 Cosmos 生态与 NEAR 之间的首次连接。整个加密世界正在成为一个越来…

19 高速列车场景下3Gpp 5G NR的DMRS设计与评估

文章目录 解决问题设计DMRS仿真参数仿真结果 解决问题 多普勒/扩展影响十分显著&#xff0c;设计用于信道估计时&#xff0c;需要考虑解调参考信号&#xff0c;5G用DMRS结构而不是CRS结构&#xff0c;因此需要为高速UE设计DMRS结构&#xff0c;DMRS设计是为了提高信道估计并减…

JVM-1-运行时数据区

程序计数器&#xff08;Program Counter Register&#xff09; 是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1]&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令&…

k8s集群使用calico网络组件

一、前言 k8s的网络组件可以使用flannel或者calico两种&#xff0c;flannel的配置比较简单&#xff0c;但是性能还是calico会更高一点&#xff0c;所以现在来介绍以下calico网络组件的部署 二、部署 k8s集群版本对calico的版本也有对应要求&#xff0c;k8s 1.23.0版本要求对应…

Android13音频录制适配

Android13音频录制适配 前言&#xff1a; 之前写过一篇音频录制的文章&#xff0c;当时是在Android10以下的手机可以成功录制和播放&#xff0c;但是Android10及以上手机提示创建文件失败&#xff0c;最近做过Android13的适配&#xff0c;索性一起把之前的录音也适配了&#…

【MySQL】:表的内外连接

表的内外连接 一.内连接二.外连接1.左外连接2.右外连接 一.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询。 语法&#xff1a;select 字段 from 表1 inner …

如何通过浏览器扩展修改浏览器的UserAgent

User-Agent Switcher and Manage&#xff1a; https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg 使用说明&#xff1a; User Agent Switcher and Manager :: add0n.com 示例&#xff1a; 勾选一个UA&#xff0c;比如c…

测试工具Jmeter:设置中文界面

首先我们打开Jmeter所在的文件&#xff0c;进入bin目录&#xff0c;打开Jmeter.properties&#xff1a; 打开后找到languageen&#xff1a; 改为zh_CN: 保存关闭&#xff0c;然后再打开Jmeter&#xff1a; 英文并不会显得高级&#xff0c;能做到高效的性能测试才是高级的。

邮件营销:定义、优势与策略指南

什么是邮件营销&#xff1f;跨境电商或者出海企业可能会经常使用它&#xff0c;它是传统的营销方式之一&#xff0c;在上世纪80年年代得以运用。 邮件营销&#xff0c;英文全称为Email Direct Marketing&#xff0c;缩写为EDM。它是指在收件人许可的情况下&#xff0c;通过电子…

【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 一般涉及到最小层数问题…