左神算法基础提升--3

news2025/1/20 3:57:55

文章目录

  • Manacher 算法
    • 经典算法
    • Manacher算法原理
  • 单调栈或单调队列


Manacher 算法

经典算法

在这里插入图片描述
在每学习Manacher算法之前我们可能会使用一种比较经典暴力的算法:遍历str字符串,将字符串中的每个字符作为对称点,向两边扩散找到回文字段,并与最长进行比较,直到找到最长回文子串。
但这种算法有一个问题:他无法找到偶数的回文子串,因为偶数回文子串的对称轴不在字符串中,而是一条虚线。
为了解决这个问题,我们需要采用填补的方法将原字符串通过使用某一种特定的字符填补。
在这里插入图片描述
通过这种方法便能够找到填补后的字符串的最长回文子串的长度,再将字符串中每个节点长度除以2便能找到原字符串中最长回文子串的长度。
需要注意的是,填补的字符可以是任意的甚至是原字符串中出现都没关系,都能找到正确的结果、
这种方法虽然能够找到正确的答案,但是其所需时间较长。其时间复杂度为O(n^2).

Manacher算法原理

Manacher算法和KMP算法类似,均是找到其内部的数学规律,借助其他的数据结构减少重复计算。
在学习Manacher算法前我们需要了解两个定义:1.回文半径数组;2.最右回文右边界;
回文半径数组是指:找到填补后的字符串的每一个字符为中心的回文半径。
最有回文右边界是指:找到的属于回文的最右的右边界。
在这里插入图片描述
在了解上面的概念后,边可以使用Manacher算法进行优化了。
对算法进行优化主要分为种情况:
1.选定为中心的字符在最右回文右边界的左边;
在这种情况下,与前文提到的暴力方法相同,直接暴力扩展。
2.选定为中心的字符在最右回文右边界里;这种情况又分为两种
①该点与最右回文右边界的对称点对称的点所在的回文半径数值小于该点到最右回文右边界的距离;
在这里插入图片描述
此时该点的最长回文子串长度与其对称点长度相同。
②该点与最右回文右边界的对称点对称的点所在的回文半径数值大于该点到最右回文右边界的距离;
在这里插入图片描述
此时该点的最长回文子串长度为该点到最右回文右边界的距离。
③该点与最右回文右边界的对称点对称的点所在的回文半径数值恰好恰好等于该点到最右回文右边界的距离;
在这里插入图片描述
在这种情况下,我们需要接着进行尝试,看看该点能不能找到一个更大的最长回文子串。
完整代码
在这里插入图片描述
在这里插入图片描述

单调栈或单调队列

在这里插入图片描述
在求解这道题时,我们可以使用双端队列进行求解,我们在双端队列中维持一个单调性,按从大到小的顺序依次将窗口内的下。在窗口往右移动的时候,依旧保持这个单调性,并将新加入的数组中的数的下标从尾部加入双端队列中;
在窗口往左移动的时候,判断当前是否已经移动过了双端队列内的下标,如果移动过了即双端队列中的下标有些已经不在窗口内了,便将他们从头部弹出。
在这里插入图片描述
这个双端队列实际上存放的是窗口以此往右移动依次过期的最大值。
代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
对于这道题,我们需要使用单调栈实现。
我们先创建一个栈,并在栈中维持好从小到大的单调性。依次将数组中的数加入到栈中,如果一个数加入后会破坏其单调性,我们便需要将其弹出,同时使其弹出的数便是从右离这个数最近且比这个数小的数,其在栈中的下个数便是比该数小且左边离该数最近的数。
在这里插入图片描述

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

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

相关文章

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…

windows远程桌面连接限定ip

1,Windows防火墙->高级设置->远程桌面 - 用户模式(TCP-In)->作用域->远程IP地址 2,启用规则

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…

光谱相机如何还原色彩

多光谱通道采集 光谱相机设有多个不同波段的光谱通道,可精确记录每个波长的光强信息。如 8 到 16 个甚至更多的光谱通道,每个通道负责特定波长范围的光信息记录。这使得相机能分辨出不同光谱组合产生的相同颜色感知,而传统相机的传感器通常只…

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址:https://arxiv.org/abs/2403.01744 bib引用: misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…

【跟着官网学技术系列之MySQL】第7天之创建和使用数据库1

前言 在当今信息爆炸的时代,拥有信息检索的能力很重要。 作为一名软件工程师,遇到问题,你会怎么办?带着问题去搜索引擎寻找答案?亦或是去技术官网,技术社区去寻找? 根据个人经验,一…

ComfyUI 矩阵测试指南:用三种方法,速优项目效果

在ComfyUI中,矩阵测试也叫xyz图表测试,作用是通过控制变量的方式来对Lora模型以及各种参数开展测试,并进行有效区分。其中测试方法有很多种,可以通过借助插件也可以自行搭建工作流实现,下面介绍3种方式: 1…

Day 9 卡玛笔记

这是基于代码随想录的每日打卡 151. 反转字符串中的单词 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 **…

音视频入门基础:RTP专题(4)——FFmpeg源码中,判断某文件是否为SDP文件的实现

一、引言 执行《音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流》中的“媒体文件转推RTP的FFmpeg命令”会生成一个SDP文件,该文件内容如下: v0 o- 0 0 IN IP4 127.0.0.1 sNo Name t0 0 atool:libavformat 61…

数据结构——队列和栈的面试题分析

之前我们写过了有效括号的分析了,接下来,我们继续来学习一下,有关栈和队列之间的相关转换的题目吧。 栈实现队列 232. 用栈实现队列 - 力扣(LeetCode) 这里我们使用c语言的形式来写,所以我们先自己模拟一…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言:在当今数字化时代,分布式系统和大数据处理变得愈发普遍,消息队列作为其中的关键组件,承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

Web前端------表单标签

一.表单标签介绍 1.认识表单 表单---类似于日常生活中的申请单 都是去填写一些信息去申请某个功能&#xff0c;例如&#xff1a;账号密码昵称&#xff0c;登陆网站 2.常见标签 常见的标签 <form></form> 表单标签&#xff0c;所有表单信息都包含在这个标签内…

20250118-读取并显示彩色图像以及提取彩色图像的 R、G、B 分量

读取并显示彩色图像以及提取彩色图像的 R、G、B 分量 import cv2 #彩图R、G、B的提取 import torch from PIL import Image from matplotlib import pyplot as plt import numpy as np读取并显示彩色图像的三种方法&#xff1a; img_path "./data/yndx"1.1 使用 …

下定决心不去读研了。。。

大家好&#xff0c;我是苍何。 之前发表过一篇文章&#xff0c;表达了自己读研的困惑和纠结&#xff0c;得到了大家很多的建议&#xff0c;也引起了很多人的共鸣&#xff0c;在留言区分享了自己的故事&#xff0c;看着这些故事&#xff0c;我觉得都够苍何写一部小说了。 可惜苍…

单链表的新建、查找

10.3 头插法新建链表实战 10.3.1 流程图 10.3.1.1 整体的流程图 10.3.1.2 循环的流程图 10.3.2 代码 !!!头指针始终指向头结点&#xff01;&#xff01;&#xff01;头插法&#xff1a;实则就是不断地插元素插在头结点的后面最初要先给头结点的指针域赋值为NULL #include &…

【unity进阶篇】向量插值运算Vector3.Lerp和Vector3.Slerp

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

CSS 的基础知识及应用

前言 CSS&#xff08;层叠样式表&#xff09;是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现&#xff0c;使页面不仅实现功能&#xff0c;还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…

怎么投稿各大媒体网站?如何快速辨别一家媒体是否适合自己?

在做软文营销时&#xff0c;除去在官号和子账号上投稿外&#xff0c;怎么投稿各大媒体网站是困扰中小企业主的一大难题。没有多余账号、运营成本太高&#xff0c;让不少想做全平台推广的朋友止步于此。为了解决这些问题&#xff0c;今天就让小编来分享一下&#xff0c;怎么在各…

dl学习笔记:(4)简单神经网络

&#xff08;1&#xff09;单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…

01设计模式(D3_设计模式类型 - D3_行为型模式)

目录 一、模版方法模式 1. 基本介绍 2. 应用案例一&#xff1a;豆浆制作问题 需求 代码实现 模板方法模式的钩子方法 3. View的draw&#xff08;Android&#xff09; Android中View的draw方法就是使用了模板方法模式 模板方法模式在 Spring 框架应用的源码分析 知识小…