力扣hot100 分割回文串 集合 dfs

Problem: 131. 分割回文串
1

文章目录

  • 思路
  • Code
  • 💖 DP预处理版

思路

👨‍🏫 参考题解

Code

在这里插入图片描述

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;public class Solution {int n;//字符长度List<List<String>> res = new ArrayList<>();char[] ss;//字符数组public List<List<String>> partition(String s) {n = s.length();if (n == 0)return res;ss = s.toCharArray();dfs(0, new Stack<String>());return res;}
// idx 是当前未分割段的起点包含)
// path 是当前已分割的字符串集合private void dfs(int idx, Stack<String> path) {if (idx == n) //n以前的字符都分割了,结算{res.add(new ArrayList<String>(path));return;}for (int i = idx; i < n; i++) // i 枚举的是截取的位置{if (!check(idx, i))//不回文直接跳过continue;path.add(new String(ss, idx, i + 1 - idx));dfs(i + 1, path);// i 是截取的位置,i+1 是未截取段的起点path.pop();}}// 判断 ss[] 中 [l,r] 区间是否为回文子串,回文返回 trueprivate boolean check(int l, int r) {while (l < r)if (ss[l++] != ss[r--])return false;return true;}
}

💖 DP预处理版

在这里插入图片描述

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;public class Solution {public List<List<String>> partition(String s) {int len = s.length();List<List<String>> res = new ArrayList<>();if (len == 0) {return res;}char[] charArray = s.toCharArray();// 预处理// 状态:dp[i][j] 表示 s[i][j] 是否是回文boolean[][] dp = new boolean[len][len];// 状态转移方程:在 s[i] == s[j] 的时候,dp[i][j] 参考 dp[i + 1][j - 1]for (int right = 0; right < len; right++) {// 注意:left <= right 取等号表示 1 个字符的时候也需要判断for (int left = 0; left <= right; left++) {if (charArray[left] == charArray[right] && (right - left <= 2 || dp[left + 1][right - 1])) {dp[left][right] = true;}}}Deque<String> stack = new ArrayDeque<>();dfs(s, 0, len, dp, stack, res);return res;}private void dfs(String s, int index, int len, boolean[][] dp, Deque<String> path, List<List<String>> res) {if (index == len) {res.add(new ArrayList<>(path));return;}for (int i = index; i < len; i++) {if (dp[index][i]) {path.addLast(s.substring(index, i + 1));dfs(s, i + 1, len, dp, path, res);path.removeLast();}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub-DC-2

信息收集&#xff1a; kali里使用netdiscover发现主机 使用命令&#xff1a; nmap -sS -sV -A -n 172.16.5.18 打开网站 找到flag1 他提示我们使用cewl工具&#xff08;一个字典生成工具&#xff09; 那么既然我们有了密码 我们还需要知道用户名使用wpscan 这个工具使用命令&a…

PyTorch深度学习实战(34)——Pix2Pix详解与实现

PyTorch深度学习实战&#xff08;34&#xff09;——Pix2Pix详解与实现 0. 前言1. 模型与数据集1.1 Pix2Pix 基本原理1.2 数据集分析1.3 模型构建策略 2. 实现 Pix2Pix 生成图像小结系列链接 0. 前言 Pix2Pix 是基于生成对抗网络 (Convolutional Generative Adversarial Netwo…

Flask 入门2:路由

1. 前言 在上一节中&#xff0c;我们使用到了静态路由&#xff0c;即一个路由规则对应一个 URL。而在实际应用中&#xff0c;更多使用的则是动态路由&#xff0c;它的 URL是可变的。 2. 定义一个很常见的路由地址 app.route(/user/<username>) def user(username):ret…

测试 35 个 webshell 检测引擎的查杀结果

最近发现了一个有意思的 使用分支对抗技术制作的 PHP Webshell 开源项目&#xff0c;共数十个查杀引擎免杀&#xff0c;项目地址&#xff1a;https://github.com/icewolf-sec/PerlinPuzzle-Webshell-PHP 什么是 Webshell Webshell 是一种恶意脚本&#xff0c;它能让攻击者通过…

C++ //练习 3.14 编写一段程序,用cin读入一组整数并把它们存入一个vector对象。

C Primer&#xff08;第5版&#xff09; 练习 3.14 练习 3.14 编写一段程序&#xff0c;用cin读入一组整数并把它们存入一个vector对象。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /***********************************…

前端基础-事件循环(消息循环)

这里写自定义目录标题 1. 浏览器进程主要的进程&#xff08;了解&#xff09; 2. 渲染主线程是如何工作的&#xff1f;3. 面试题&#xff1a;如何理解 JS 的异步&#xff1f;3. JS为何会阻碍渲染&#xff1f;4. 任务有优先级吗&#xff1f;5. 面试题&#xff1a;阐述一下 JS 的…

故障诊断 | 一文解决,BiLSTM双向长短期记忆神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab) 支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,用于分类和回归分析。SVM的主要目标是找到一个最优的超平面(或者在非线性情况下是一个最优的超曲面),将不同类别的样本分开…

最全前端 HTML 面试知识点

一、HTML 1.1 HTML 1.1.1 定义 超文本标记语言&#xff08;英语&#xff1a;HyperTextMarkupLanguage&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言 HTML元素是构建网站的基石 标记语言&#xff08;markup language &#xff09; 由无数个…

云计算概述(云计算类型、技术驱动力、关键技术、特征、特点、通用点、架构层次)(二)

云计算概述&#xff08;二&#xff09; &#xff08;云计算类型、技术驱动力、关键技术、特征、特点、通用点、架构层次&#xff09; 目录 零、00时光宝盒 一、云计算类型&#xff08;以服务的内容或形态来分) 二、云计算的12种技术驱动力 三、云计算的关键技术 四、云计…

java spring cloud eureka 简单实验

1.概要 1.1 目标说明 注册中心是微服务管理服务的一个工具&#xff0c;这里以eureka为例先创建一个。目标就是让服务启动起来。 1.2 创建步骤 创建一个主工程&#xff0c;选项eureka创建一个子工程&#xff0c;实现服务 1.2 知识要点 SpringBootApplication EnableEurekaS…

使用Mysql实现Postgresql中窗口函数row_number的功能

1. 描述 需要根据用户id&#xff0c;查询每个人得分第二高的科目信息 2. 表结构及数据 2.1 表结构 CREATE TABLE t_score (id bigint(20) NOT NULL AUTO_INCREMENT,user_id bigint(20) NOT NULL,score double NOT NULL,subject varchar(100) NOT NULL,PRIMARY KEY (id) ) E…