【leetcode hot 100 131】分割回文串

embedded/2025/3/26 6:05:44/

解法一:回溯法+动态规划法

回溯法:

  • 假设我们当前搜索到字符串的第 i 个字符,且 s[0…i−1] 位置的所有字符已经被分割成若干个回文串,并且分割结果被放入了答案数组 ans 中,那么我们就需要枚举下一个回文串的右边界 j,使得 s[i…j] 是一个回文串。
  • 因此,我们可以从 i 开始,从小到大依次枚举 j。对于当前枚举的 j 值,我们使用双指针的方法判断 s[i…j] 是否为回文串:如果 s[i…j] 是回文串,那么就将其加入答案数组 ans 中,并以 j+1 作为新的 i 进行下一层搜索,并在未来的回溯时将 s[i…j] 从 ans 中移除。
  • 如果我们已经搜索完了字符串的最后一个字符,那么就找到了一种满足要求的分割方法。

动态规划法:

  • 将字符串 s 的每个子串 s[i…j] 是否为回文串预处理出来,使用动态规划即可。设 f(i,j) 表示 s[i…j] 是否为回文串,那么有状态转移方程:
    在这里插入图片描述
class Solution {List<List<String>> result = new ArrayList<List<String>>();List<String> temp = new ArrayList<String>();boolean[][] huiwen;int n;public List<List<String>> partition(String s) {// 初始化n = s.length();huiwen = new boolean[n][n]; // huiwen[i][j]用于记录s[i...j]是否是回文串// 让i<j时,huiwen[i][j]=true,确保huiwen[i+1][j-1]的计算for(int i=0; i<n; i++){Arrays.fill(huiwen[i], true);}for(int i=n-1; i>=0; i--){for(int j=i+1; j<n; j++){ //不能为j=i,否则不为子串huiwen[i][j] = (s.charAt(i)==s.charAt(j)) && huiwen[i+1][j-1];}}backtrace(s, 0);return result;}public void backtrace(String s, int num){// num表示处理到s的第几个数if(num==n){result.add(new ArrayList<String>(temp));return;}for(int j=num; j<n; j++){// num,j表示s[num...j]if(huiwen[num][j]){temp.add(s.substring(num, j+1));backtrace(s, j+1);temp.remove(temp.size()-1);}}}
}

注意:

  • i<j时,huiwen[i][j]=true,确保huiwen[i+1][j-1]的计算
  • 在设置huiwen[i][j] = (s.charAt(i)==s.charAt(j)) && huiwen[i+1][j-1]时,j要从i+1开始,不能为j=i,否则不为子串
  • 在回溯的for循环中,num,j表示子串s[num...j]

http://www.ppmy.cn/embedded/176076.html

相关文章

ubuntu人工智能深度学习环境搭建。cuda和cudnn和anaconda和torch的安装。

几乎和wsl差不多&#xff0c;网不好的先下载好软件包&#xff0c;按顺序执行命令。 sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo dpkg -i cuda-repo-ubuntu2404-12-8-local_12.8.1-570.124.06-1_amd64.deb sudo cp /var/cuda-repo-ubun…

Unity开放世界实时GI分块烘焙策略技术详解

一、开放世界光照挑战与分块方案 1. 超大场景光照的核心痛点 单次烘焙不可行&#xff1a;256km场景的完整烘焙需数周计算时间 内存压力&#xff1a;单张8K光照贴图占用128MB&#xff08;BC7压缩&#xff09; 动态更新需求&#xff1a;昼夜循环、天气系统需要局部重烘焙 2.…

centos离线安装docker的那点小事

将docker信息复制到/usr/bin目录下 cp -r docker* /usr/bin/ #ll /usr/bin/docker* -rwxrwxrwx. 1 root root 38442504 Mar 17 02:16 /usr/bin/docker -rwxrwxrwx. 1 root root 71297680 Mar 17 02:16 /usr/bin/dockerd -rwxrwxrwx. 1 root root 708448 Mar 17 02:16 /usr/…

Centos6配置yum源

Centos6配置yum源 Centos6的一些优势为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空 Centos6的一些优势 Centos6的安装镜像仅400M,开机内存使用仅仅110M. 资源使用率极低,1G内存的机器就能跑的飞起. JDK和Nginx都…

1. 初识golang微服务-gRPC

单体架构 在这里插入图片描述 微服务架构 RPC架构&#xff08;远程过程调用&#xff09; 服务端实例代码&#xff1a; package mainimport ("fmt""net""net/rpc""time" )type Hello struct { }func (h Hello) SayHello(req stri…

【商城实战(57)】商城数据迁移与升级实战:开启电商新征程

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…

Facebook的社交媒体伦理:信息传播与责任的平衡

Facebook的社交媒体伦理&#xff1a;信息传播与责任的平衡 在这个数字化的时代&#xff0c;社交媒体平台&#xff0c;尤其是Facebook&#xff0c;已经成为全球数十亿用户获取信息和交流观点的主要渠道。这些平台不仅连接了世界各地的人们&#xff0c;也承担着巨大的社会责任。…

Umi从零搭建Ant Design Pro项目(2)

文章目录 前言一、新增登录页面1.登录页面代码2.登录处理3.修改app.tsx 二、说一下逻辑1. 流程图2. 注意点 总结 前言 前面写了创建项目及修改一些配置。这一章写写登录页面。 一、新增登录页面 新增登录页面&#xff0c;会涉及Umi的目录结构。先看一下文档再动手。 1.登录页…