每日算法总结——回溯算法、 LeetCode 131. 分割回文串

news2025/3/12 19:47:45

LeetCode 131. 分割回文串

131. 分割回文串 - 力扣(LeetCode)

什么是回溯算法?

回溯算法真的是解决排列问题的一大利器,其实很多时候自己不经意间就写出了回溯算法,但是一直没有一个系统的认识,今天做一个详细的总结。

概念回溯法(back tracking)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回到上一步,重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为 “回溯点”。

回溯法和穷举法很像,不如说回溯法是穷举法的一个改进,它在所有可行的选择中,系统地搜索问题的解。它假定解可以由向量形式 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)来表示,其中 x i x_i xi 的值表示在第 i i i 次选择所作的决策值,并以深度优先的方式遍历向量空间,逐步确定 x i x_i xi 的值,直到解被找到。

所以在使用回溯法时,需要在脑中形成一棵解空间构成的树

  • 当我们要解决的问题是要求一个使问题最优的n个元素的子集,问题的解空间常可以组织成一棵子集树
  • 当问题是求n个元素一个排列以使问题最优化时,解空间常可以组织成一棵排列树。

在这里插入图片描述

看到这里会发现,回溯法又和二叉树地深度优先搜索很像,其实具有界限函数的深度优先搜索法又称为回溯法,这里的界限函数又称为剪枝函数

  • 利用剪枝函数,剪除无用的分支,集中搜索最有用的分支,提高搜索效率
  • 其实就是根据已有条件判断还要不要继续向下搜索了,如果当前条件已经不成立了,当然也没有必要继续搜索了。

回溯算法设计步骤

  • 回溯函效
  • 结束条件
  • 结果添加
  • 返回操作
  • 可选选择
  • 剪枝操作
  • 路径添加
  • 下一节点
  • 路径回溯

回到本题

利用回溯算法的思想就很好分析了,可以像切面剂子一样,把字符串一个个切开,每次截取都判断已经切好的部分是否都是回文子串就行了131.分割回文串

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

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

    /**
     * 判断是否是回文串
     * @param sub 子串
     * @return 是否是回文串
     */
    private boolean isPalindrome(String sub) {
        int left = 0;
        int right = sub.length() - 1;
        while (left < right) {
            if (sub.charAt(left) != sub.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

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

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

相关文章

B树:数据结构中的平衡之道

目录 引言&#xff1a;一、定义&#xff1a;二、特点&#xff1a;三、应用场景&#xff1a;总结&#xff1a; 引言&#xff1a; 在计算机科学领域中&#xff0c;数据结构是构建和组织数据的重要工具。其中&#xff0c;B树&#xff08;B-tree&#xff09;作为一种自平衡的搜索树…

用RDMA重新思考有状态流处理

摘要 远程直接内存访问 (RDMA) 硬件弥合了网络和主要内存速度之间的差距&#xff0c;从而验证了网络通常是分布式数据处理系统中的瓶颈的常见假设。然而&#xff0c;高速网络并没有提供“即插即用”的性能&#xff08;例如&#xff0c;使用 IP-overInfiniBand&#xff09;&…

第二章 数据处理篇:transforms

教程参考&#xff1a; https://pytorch.org/tutorials/ https://github.com/TingsongYu/PyTorch_Tutorial https://github.com/yunjey/pytorch-tutorial 详细的transform的使用样例可以参考&#xff1a;ILLUSTRATION OF TRANSFORMS 文章目录 为什么要使用transformstransforms方…

RK3588平台开发系列讲解(以太网篇)PHY驱动

文章目录 一、PHY驱动初始化二、PHY 配置初始化三、PHY 的扫描四、PHY 的STATUS状态读取五、PHY的RESET 复位六、PHY 的注册phy_device_register七、PHY 的状态变化沉淀、分享、成长,让自己和他人都能有所收获!😄 一、PHY驱动初始化 完成了mdio总线的注册,以及对不一样厂家…

chatgpt赋能python:Python怎么截图

Python怎么截图 介绍 在日常的工作和学习中&#xff0c;截图是一项非常常见的操作。随着Python在各个领域的不断普及和应用&#xff0c;使用Python进行截图也成为了一个热门话题。Python作为一种高级编程语言&#xff0c;具备丰富的第三方库和模块&#xff0c;可以实现复杂的…

chatgpt赋能python:Python的GUI界面开发

Python的GUI界面开发 Python是目前非常流行的编程语言之一&#xff0c;其优雅的语法和强大的库使其在各个领域得到广泛应用。在GUI界面开发方面&#xff0c;Python也表现出了巨大的潜力。本文将介绍Python的GUI开发框架以及相关的工具和技术。 介绍 Python有多个GUI框架可供…

chatgpt赋能python:Python快速打括号小技巧

Python快速打括号小技巧 作为Python程序员&#xff0c;打括号无法避免。但是有没有快速打括号的方法呢&#xff1f;本文将分享一些小技巧&#xff0c;让你在编码中更加高效。 常规打括号 首先&#xff0c;我们来看看常规的打括号方法。在Python中&#xff0c;我们需要用括号…

Nacos架构与原理 - 健康检查机制

文章目录 注册中心的健康检查机制Nacos 健康检查机制临时实例健康检查机制永久实例健康检查机制集群模式下的健康检查机制 注册中心的健康检查机制 想象发生地质灾害,被掩埋在废墟下,搜救队需定位才能施救。两种方法: 大喊求救,告知位置与健康状况,让搜救队知晓搜救队使用专业…

机器学习之线性回归模型

1 线性回归模型介绍 线性回归模型是机器学习中非常基础且经典的模型&#xff0c;是利用线性拟合的方式探寻数据背后的规律&#xff0c;特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。 &#xff08;1&#xff09;一元线性回归 线性模型的原型为一元一次方程&…

多线程/WinAPI线程退出方式比较分析

文章目录 概述ExitThreadTerminateThread进程退出逼迫线程退出?线程入口函数返回验证无法执行C对象析构不同方案的比较参考或关联 概述 关于如何终止 Windows 线程&#xff0c;在 MSDN Terminating a Thread 一文中列举的很详细&#xff1a; A thread executes until one of …

python数据赋值后,修改新数据,原数据如何保证不被修改?

目录 1.deepcopy 2.实战演练 3.python中的变量实质 好文推荐&#xff1a;传送锚点 1.deepcopy python中对象&#xff0c;赋值后是同一地址&#xff0c;如果是可变对象&#xff0c;对其中一个修改会影响到另一个&#xff0c;如果要生成完全新的对象&#xff0c;应使用&#…

使用Gogs搭建自己的github服务器

文章目录 下载Gogs配置和启动让gogs保持运行 使用参考资料 Gogs官方网址&#xff1a;https://gogs.io/ 下载Gogs 在官网首页可以找到二进制运行&#xff0c;点击进去 让咱们去 github 咱们就去 github 看看好了。https://github.com/gogs/gogs/releases 找到自己需要的版本。 …

【OpenMMLab AI实战营第二期】语义分割与MMSegmentation

MMSegmentation 开源代码仓&#xff1a;https://github.com/open-mmlab/mmsegmentation 算法丰富&#xff1a;600预训练模型、40篇算法复现 模块化设计&#xff1a;配置简便、容易拓展 统一超参&#xff1a;大量消融实验、支持公平对比 使用方便&#xff1a;训练工具、调试…

Python处理办公自动化的10大场景

在编程世界里&#xff0c;Python已经是名副其实的网红了。Python最大优势在于容易学&#xff0c;门槛比Java、C低非常多&#xff0c;给非程序员群体提供了用代码干活的可能性。当然Python能成为大众编程工具&#xff0c;不紧是因为易学&#xff0c;还因为Python有成千上万的工具…

2. CompletableFuture

2.1 Future接口理论知识复习 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行一些方法&#xff0c;如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。 举例&#xff1a;比如主线程让一个子线程去执行任…

python中的map函数

1. map()函数的简介以及语法&#xff1a; 1.1 map是python内置函数&#xff0c;会根据提供的函数对指定的序列做映射。 1.2 map()函数的格式是&#xff1a; map(function,iterable,...) 第一个参数接受一个函数名&#xff0c;后面的参数接受一个或多个可迭代的序列 1.3 map的返…

linux基本功之高效学习Linux命令行工具的技巧:Pandoc实战

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文是专栏【linux基本功-基础命令实战】的第65篇文章。 专栏地址&#xff1a;[linux基本功-基础命令专栏] &#xff0c; 此专栏是沐风晓月对Linux常用命令的汇总&#xff0c;希望能够加深自己的印象&am…

F407之位带操作

位带操作的应用场景&#xff0c;通常在于对IO口进行输入输出读取和控制。 这就和51单片机中直接的端口赋值是一样的。 比如 P0.0 0; P0.0 1; 直接就是对端口P0.0输出0和1。 如何实现呢&#xff1f; 什么是位带操作 位带操作简单的说&#xff0c;就是把每个比特膨胀为一个32位…

全面了解AES加密:入门指南

文章目录 I. 介绍A. 什么是加密B. 为什么要加密1. 保护数据的机密性2. 防止数据被篡改3. 防止数据被窃取4. 保护数据的可信度 C. AES加密的概述 II. 对称加密与非对称加密A. 对称加密的定义和特点1. 简单快速2. 安全性较低3. 适合大量数据加密4. 密钥管理困难5. 用途广泛 B. 非…

黑马版Redis基础篇

一、 初识redis 1.1 认识 NoSQL 关系型数据库&#xff1a; 1.2 认识Redis 二、Redis 常见命令 2.1 Redis 数据结构介绍 2.2 Redis 通用命令 2.3 String 类型 2.3.1 Key的层级格式 2.4 Hash 类型 2.5 List 类型 2.6 Set 类型 2.7 SortedSet 类型 三、Redis 的 Java 客户端 1.…