【算法训练-字符串 二】最长回文子串

news2024/11/19 23:25:48

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【最长回文子串】,使用【字符串】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。
在这里插入图片描述

名曲目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍

最长回文子串【MID】

一道中心扩展思想解决的MID题目

题干

直接粘题干和用例

解题思路

在这里插入图片描述

  1. 每个字符都可以尝试作为中心点看,会出现两种情况:可能是类似 aba 的字符串,也可能是类似 abba 的情况
  2. 只需要分别计算出以一个和两个字符作为中心点的子串,取出较大的长度即可
  3. 从left到right开始向两边扩散、比较,如果相等则继续扩散比较;如果不相等则剪枝,不用再继续扩散比较
  4. 计算每次比较的回文子串长度,取最大

代码实现

给出代码实现基本档案

基本数据结构字符串
辅助数据结构
算法迭代
技巧双指针、中心扩散法

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return int整型
     */
    public String longestPalindrome(String s) {
        // 1 边界条件判断

        if (s.length() < 2) {
            return s;
        }
        // 2 初始化参数,结果参数的第一位存储起始位置,第二位存储长度
        int maxLength = 0;
        int[] result = new int[2];

        // 3
        for (int i = 0; i < s.length(); i++) {
            // 中心位置奇数情况下扩展结果
            int[] odd = centerSpread(s, i, i);
            // 中心位置偶数情况下扩展结果
            int[] even = centerSpread(s, i, i + 1);
            // 当前中心位置最大子串
            int[] curMax = odd[1] > even[1] ? odd : even;
            // 当前中心位置最大子串如果大于历史记录最大子串则暂存最大值及预期返回结果
            if (curMax[1] > maxLength) {
                maxLength = curMax[1];
                result = curMax;
            }
        }
        // 截取返回结果,本来如果起点是1,长度是2,那么结尾下标应该2(1+2-1),这里结尾为1+2=3,是因为3不会被计入,因为substring左闭右开区间,所以计算为(1+2-1+1(为开区间+1)=1+2=3)
        return s.substring(result[0], result[0] + result[1]);
    }

    // 扩散的核心方法
    public int[] centerSpread(String s, int left, int right) {
        // 双指针在边界内,且满足扩散条件
        while (left >= 0 && right <= s.length() - 1  &&
                s.charAt(left) == s.charAt(right)) {
            left--;
            right++;
        }
        // 回文子串为左右指针开区间内的部分:right-1-(left+1)+1=right-left-1
        return new int[] {left + 1, right - left - 1};
    }
}

复杂度分析

时间复杂度 O(N^2):平均需要遍历每个结点作为中心点O(N),还需要从中心点向左右扩散比较O(N)
空间复杂度 O(1):只用到常量

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

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

相关文章

物奇5007crash问题dump、栈回溯的四种定位方法

概述 物奇属于RISC-V架构(chapter1_riscv.md 华中科技大学操作系统团队/pke-doc - Gitee.com)&#xff0c;在遇到crash问题时&#xff0c;系统内部会对内存进行相关的保护和检测&#xff0c;当发现异常时会主动调用 IOT_ASSERT&#xff0c;通常会产生相关的 log 文件&#xf…

EXD 设计访谈|Vol.1 从“组件容器”聊到 B 端设计师的价值自证瓶颈

主持&#xff1a;元宝&#xff5c;嘉宾&#xff1a;赫本 《EXD 设计访谈》是由 EXD&#xff08;易知微用户体验设计团队&#xff09;制作的一档设计聊天栏目&#xff0c;主要和你分享我们在易知微这家公司里&#xff0c;关于 B 端工具设计、可视化内容设计、ToB 品牌运营设计方…

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号&#xff0c;显示成绩】 7、统计。【…

StopWatch如何快速使用?

StopWatch如何快速使用&#xff1f; import org.springframework.util.StopWatch; public class StopWatchExample {public static void main(String[] args) {//创建stopWatch对象StopWatch stopWatch new StopWatch();// 开始计时 代码片段 起名task1stopWatch.start("…

运行速度高达1.8GHz可编程采集网关

今天介绍下BL304这个设备。嵌入式ARM控制器BL304系列是一款专为工业控制领域设计的坚固型工控设备。它采用NXP公司的处理器I.MX8M Mini四核64位处理器&#xff0c;搭配四核 Cortex-A53单核Cortex-M4构架&#xff0c;运行速度高达1.8GHz&#xff0c;具有高度的稳定性和可靠性。 …

Docker环境搭建Prometheus实验环境

环境&#xff1a; OS&#xff1a;Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…

【重要】NAND Flash基础知识简介

NAND Flash是一种非易失存储介质&#xff08;掉电后数据不会丢失&#xff09;&#xff0c;常见的U盘、TF卡/SD卡&#xff0c;以及大部分SSD&#xff08;固态硬盘&#xff09;都是由它组成的。 本文主要介绍其组成及工作原理。 为了表述方便&#xff0c;后面所说的Flash仅指NAN…

folium 地图加载速度提升让加载速度飞起来 加载本地资源

背景 去年写了篇关于如何让folium生成的html地图加载速度飞起来的笔记&#xff0c;笔记中提到解决问题的思路是对html文档中的js/css资源的引用进行本地化替换&#xff0c;并给出了本地化资源&#xff0c;以及资源替换的处理函数。但没有展示这个方法处理带来的效果。 基于以…

数字人创作+SadTalker+GTX1080

https://github.com/OpenTalker/SadTalker 开源项目 SadTalker模型是一个使用图片与音频文件自动合成人物说话动画的开源模型&#xff0c;我们自己给模型一张图片以及一段音频文件&#xff0c;模型会根据音频文件把传递的图片进行人脸的相应动作&#xff0c;比如张嘴&#xf…

线上批量查询物流导出到表格的操作指南

现在的生活中&#xff0c;我们经常需要查询包裹物流信息。如果一次性需要查询多个快递单号的物流信息&#xff0c;手动一个一个查询会非常麻烦。今天&#xff0c;我将向大家分享一个简单实用的方法&#xff0c;可以批量查询物流并导出到表格&#xff0c;方便随时查看。 首先&am…

AP51656 PWM和线性调光 LED车灯电源驱动IC 兼容替代PT4115 PT4205

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源 用于驱动一颗或多颗串联LED 输入电压范围从 5V 到 60V&#xff0c;输出电流 可达 1.5A 。根据不同的输入电压和 外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用高端电流采样设置 …

【AWS】实操-保护 Amazon S3 VPC 终端节点通信

文章目录 实验概览目标实验环境任务 1&#xff1a;探索并启动实验环境任务 1.1&#xff1a;探索 Amazon VPC 资源任务 1.2&#xff1a;探索 Amazon EC2 资源任务 1.3&#xff1a;创建 Amazon VPC 终端节点任务 1.4&#xff1a;连接私有 EC2 实例任务 1.5&#xff1a;探索 Amazo…

在win上,使用命令关闭占用端口号的进程

假设在 Windows 10 上&#xff0c;你可以使用以下命令关闭占用端口号为6200的进程&#xff1a; 打开命令提示符或 PowerShell 终端。 运行以下命令以查找占用端口号为6200的进程的 PID&#xff1a; netstat -ano | findstr :6200在输出中&#xff0c;找到占用端口号为6200的…

金蝶云星空二开,插件查看工具

可查询单据上挂载的系统原有插件、二开插件及插件类型 1.支持模糊查询单据列表 2.支持项目与账套二开插件对比 3.支持金蝶不同账套之间对比差异 操作步骤&#xff1a; 1.登陆界面&#xff0c;选择金蝶云管理中心账套登录获取账套列表&#xff1b; 2.单一标识查询&#xff1a;…

【Vue3】组件递归

【Vue3】组件递归 实现效果 通过传入一个数字&#xff0c;实现数字次循环 父组件 <script setup> import { ref } from "vue"; import RecursionMe from "./components/RecursionMe/index.vue";const level ref(0);const add () > level.val…

Unity 切换场景后场景变暗

问题 Unity版本&#xff1a;2019.4.34f1c1 主场景只有UI&#xff0c;没有灯光&#xff0c;天空盒&#xff1b;其他场景有灯光和天空盒所有场景不烘焙主场景作为启动场景运行&#xff0c;切换到其他场景&#xff0c;场景变暗某一个场景作为启动场景运行&#xff0c;光影效果正…

建筑工程数据处理的重要性有哪些?

建筑工程的数据非常复杂&#xff0c;数据处理也是非常重要的。它可以提高工程效率和质量&#xff0c;能够为决策者提供依据。那对于建筑工程来讲&#xff0c;数据处理重要性有哪些&#xff1f; 1.提高数据准确性 建筑工程数据处理需要准确无误&#xff0c;避免出现措施以及出现…

内网隧道代理技术(十八)之 上线不出网机器

上线不出网机器 不出网机器介绍 上线不出网机器是我们常见的问题&#xff0c;如何在内网中实现不出网机器的上线呢&#xff0c;我们分为了如下的形式&#xff0c;根据之前所学的内容我们开始进行实验&#xff0c;常见的网络拓扑如下&#xff1a; 一般渗透的场景是这样的&…

瑞芯微:基于RK3568得人脸朝向检测

驾驶员监控系统是基于驾驶员面部图像处理来研究驾驶员状态的实时系统。首先挖掘出人在疲劳状态下的表情特征&#xff0c;然后将这些定性的表情特征进行量化&#xff0c;提取出面部特征点及特征指标作为判断依据&#xff0c;再结合实验数据总结出基于这些参数的识别方法&#xf…

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘

原因 pytorch版本问题 解决办法 顺着路径找到文件upsampling.py并打开&#xff0c;修改里面的代码即可解决&#xff0c; 这个方式不需要重新安装pytorch YOLOV5 训练好模型测试时出现问题&#xff1a;AttributeError: ‘Upsample‘ object has no attribute ‘recompute_sc…