【算法专题--回文】最长回文子串 -- 高频面试题(图文详解,小白一看就懂!!)

news2024/11/12 9:02:40

目录

一、前言

二、题目描述 

三、预备知识 

🥝 什么回文串 ?  

四、题目解析   

五、总结与提炼    

六、共勉    


一、前言

        最长回文子串 这道题,可以说是--回文专题 --,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
       本片博客就来详细的讲讲解一下 最长回文子串 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

题目链接:5. 最长回文子串 - 力扣(LeetCode) 

三、预备知识 

🥝 什么回文串 ?  

 回文串 的概念就是正着读和倒着读是一样的字符串,分为以下两种情况  

  • ① 11211  ---- 奇数个
  • ② 112211    ---- 偶数个

不难发现,除了中间的字符外所有的字符均在一首一尾出现了一次,也就是说,出现在两边的字符数量一定是偶数,只有出现在中间的字符数量可以是奇数  

  • 现在,我们把上述①、②回文串拆分成 left,mid,right三个部分,如下图 

  • 「回文串」长度为偶数所有不同字符的出现次数都为「偶数」
  • 「回文串」长度为奇数位于中点的字符出现「奇数」次其余字符出现「偶数」次

因此,某字符串是回文串排列之一的「充要条件」为此字符串中,最多只有一种字符的出现次数为「奇数」其余所有字符的出现次数都为「偶数」。   

四、题目解析   

中心扩展法  

  • 如果中心点相等(s[i] = s[j]),就检查各自的下一位是否相等 s[i-1] = s[j+1]?
  • 我们可以把每个字符 s[i] 作为子串的中心,然后依次往两边进行搜索。要注意的是,每个字符可以构成奇数长度和偶数长度。因此我们中心要分两种情况进行枚举。

  • 中心扩散的方式最后我们得到的是子串的中心索引和长度,为了截取子串,我们需要推算子串起点索引。 

class Solution {
public:
    string longestPalindrome(string s) 
    {
        //中心扩展算法
        int begin = 0 , len = 0 , n = s.size();
        for(int i = 0; i < n;i++) // 依次枚举所有的中点
        {
            //先做一次奇数次的扩展
            int left = i , right = i;
            //确保 left 和 right 不能越界
            while(left >=0 && right < n && s[left]==s[right])
            {
                left--;
                right++;
            }
            // 如果新的长度大于之前的长度,那就更新
            if(right-left-1 > len)
            {
                // 计算其实位置和长度
                begin = left + 1; // 因为每次循环 left 和 right 会多运行一次
                len = right - left -1;
            }
            //再做一次偶数次的扩展
            left = i , right = i + 1;
            while(left >=0 && right < n && s[left]==s[right])
            {
                left--;
                right++;
            }
            if(right-left-1 > len)
            {
                begin = left + 1;
                len = right - left -1;
            }
        }
        return s.substr(begin,len);
    }
};

五、总结与提炼    

最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 最长回文子串 的题目,这道题目是校招笔试面试中有关 回文 章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 !!

六、共勉    

 以下就是我对  最长回文子串 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 回文专题 的理解,请持续关注我哦!!!   

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

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

相关文章

哈希表和双向链表实现LRU

LRU&#xff08;Least Recently Used&#xff09;即最近最少使用&#xff0c;是一种内存管理算法。最近在Linux的缓冲区管理也看到了使用LRU算法&#xff0c;即利用哈希表进行 O(1) 复杂度的快速查找&#xff0c;利用双向链表&#xff08;里面的元素是缓冲头&#xff09;对缓冲…

再次进阶 舞台王者 第八季完美童模全球赛代言人【吴浩美】赛场+秀场超燃合集

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——吴浩美迎来了她舞台生涯的璀璨时刻。 代言人——吴浩美&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&#xff0c;作为开…

【趣学Python算法100例】兔子产子

问题描述 有一对兔子&#xff0c;从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子&#xff0c;假设所有的兔子都不死&#xff0c;问30个月内每个月的兔子总对数为多少&#xff1f; 题目解析 兔子产子问题是一个有趣的古典数学问题&#xff0c…

Office关闭安全提示

每次启动都要提示这个&#xff0c;怎么关&#xff1f;

大数据-135 - ClickHouse 集群 - 数据类型 实际测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数

title: Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数 date: 2024/9/14 updated: 2024/9/14 author: cmdragon excerpt: 通过使用 Nuxt Kit 的自动导入功能,您可以更高效地管理和使用公共函数、组合式函数和 Vue API。无论是单个导入、目录导入还是从第三方模块导入…

GMB外链是什么?

GMB外链其实就是百万外链&#xff0c;它是一种通过大量反向链接来提升网站页面权重的方法。如果你刚建了一个新网站&#xff0c;想在短时间内被收录并获得排名&#xff0c;GMB外链能帮你做到这点。它不像传统SEO那样需要等待好几个月的效果&#xff0c;GMB外链能在24小时内帮你…

vector(2)

前言 通过上一节的学习&#xff0c;我们知道了vector中可以存放各种类型的数据&#xff0c;这就意味着vector之中不仅仅可以存放int、char等内置类型&#xff0c;还可以存放vector和string等类型&#xff0c;我们结合底层的具体情况来具体分析 vector的复用&#xff08;套娃&a…

光控资本:股票增发是什么意思?股票增发的形式?

股票增发配售是已上市的公司通过指定投资者&#xff08;如大股东或组织投资者&#xff09;或全部投资者额定发行股份搜集资金的融资办法。 留意&#xff1a;股票增发后&#xff0c;股价会除权下降。由于增发后股本扩大了&#xff0c;那么每股收益与每股净资产均下降&#xff0…

今天一次讲明白C++条件变量

在C中&#xff0c;std::condition_variable 条件变量是一个同步原语&#xff0c;它允许一个或多个线程在某个条件成立时&#xff0c;被另一个线程唤醒。std::condition_variable 条件变量通常与互斥锁&#xff08;std::mutex&#xff09;一起使用&#xff0c;以保护共享数据和同…

David Baker 任科学顾问,初创公司发布世界最大蛋白质相互作用数据库,已获 8 轮融资

蛋白质-蛋白质相互作用 (Protein-Protein Interactions, PPI) 是细胞生命活动的重要组成部分&#xff0c;在调控和维持细胞的生理功能中&#xff08;如细胞的信号传导、代谢反应和基因表达&#xff09;发挥着不可或缺的作用。 然而目前 PPl 数据库中的数据相对较少&#xff0c…

穿越病毒区-第15届蓝桥省赛Scratch中级组真题第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第187讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

CCF201912_1

题解&#xff1a; #include<bits/stdc.h>using namespace std;int n;bool shouldSkip(int num) {if (num % 7 0){return true;}while (num > 0){if (num % 10 7){return true;}num / 10;}return false; } int main() {scanf("%d", &n);int b[4] { 0…

Android Studio 安装配置教程(Windows最详细版)

目录 前言 Android Studio 下载 Android Studio 安装 Android Studio 使用 一、创建默认项目&#xff08;Compose&#xff09; 二、创建常规项目 三、使用ViewBinding 四、查看Gradle版本、SDK版本、JDK版本 ① Gradle版本 ② SDK版本 ③ JDK版本 前言 Android开发…

跟《经济学人》学英文:2024年09月14日这期 The sweet story of Peru’s blueberry boom

The sweet story of Peru’s blueberry boom Plucky farmers have transformed the market in only ten years plucky&#xff1a;英 [ˈplʌki] 勇敢的&#xff1b;无畏的&#xff1b;有胆识的 原文&#xff1a; Peru’s blueberry harvest is just beginning, and Ivan Ja…

自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)

&#xff08;七&#xff09;CILQR约束条件下的ILQR求解 CILQR&#xff08;(Constrained Iterative Linear Quadratic Regulator)&#xff09; 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下&#xff0c;系统不仅要优化控制输入以最小化代价函数&#x…

NET WPF使用组件库HandyControl

一、背景 WPF原生控件提供的API功能不够强大&#xff0c;设置一般的功能都需要进行很复杂的配置和实现。 1.1 原生按钮控件 例如&#xff0c;原生控件<Button/> 默认效果是这样的&#xff1a; MainWindow.xaml代码&#xff1a; <Window x:Class"wpf_demo.Mai…

SAP_ABAP_编程基础

SAP ABAP 顾问能力模型(同心圆方法论)_sap abap 顾问能力模型(同心圆方法论)-CSDN博客文章浏览阅读1.8k次,点赞5次,收藏35次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!_sap abap 顾问能力模型(同心圆方法论)htt…

我们的Python服务器开发脚手架开放了

pdServer是我们实践过程中的产物&#xff0c;当我们在开发各类python应用时&#xff0c;经常需要一个server来提供服务。于是我们使用fastApi来提实现&#xff0c;并在这个过程中不断的完善&#xff0c;实现了JWT\SQL等。 我们的脚手架项目可以&#xff1a; fastApi实现一个服…

数据线电子行业MES系统功能与生产过程管理

万界星空科技针对数据线电子行业的MES系统&#xff08;制造执行系统&#xff09;&#xff0c;其具体功能、生产过程管理以及注塑机设备数据采集等方面&#xff0c;可以详细介绍如下&#xff1a; 一、电子行业MES系统具体功能 计划管理&#xff1a; MES系统能够根据客户需求和销…