Leetcode面试经典150题-5.最长回文子串

 解法都在代码里,不懂就留言或者私信

class Solution {public static String longestPalindrome(String s) {if(s == null || s.length() == 0) {return null;}//加工字符串,例如abcdcba加工成#a#b#c#d#a#b#c#d#String str = getManacherString(s);char[] strArr = str.toCharArray();int[] pArr = new int[strArr.length];//回文区域的最右边的下一个位置int R = -1;//把回文区域推到R-1的圆心位置,R更新的话C一定要更新int C = -1;//记录最大的递归半径int max = 1;//end用来表示max最大时候的递归范围的右边界int end = -1;for(int i = 0; i < strArr.length; i++) {//R是原来推到的最右位置的下一个位置,R=i的时候,i就在原来的最远区域的外面了//R>i代表i还在原来推到的最远的右边界内//先赋值一个不用验证的范围:如果在R外则最小半径是1,在R外则取Math.min(pArr[2*C - i], R - i)//为什么这个区域不用验证看<https://www.xiaohuazhuo.com/board/656b07678b0e1e0a7cc8784a>//1.如果i在C的递归范围以内(R>i),分为三种情况//(1) 如果i关于C对称的位置i1的递归左边界在L~R之间,则i的递归半径与i1相同,递归右边界在R之前,递归直径为pArr[2*C-i],这种情况这个值比R-i小//(2) 如果i关于C对称的位置i1的递归左边界在L之前,则i的递归右边界是R,递归半径是R-i,这种情况R-i比pArr[2*C-i]要小//(3) 如果i关于C的对称的位置i1的递归左边界刚好就是L,则i位置的递归右边界至少为R,递归半径至少为R-i,这种情况R-i>=pArr[2*C-i]//这三种情况的最小值都是Math.min(pArr[2*C - i]),前两种情况的递归半径是确定的,第三种情况仍有继续扩大的可能//2如果i在C的递归范围以外(R<=i)则递归半径至少=1是不用证明的,这种情况就是两边都扩不了(该位置自身)//我们可以通过pArr[i]=1这种情况可以想到C+pArr[i]肯定是以R为中心的递归范围的下一个位置pArr[i] = R > i? Math.min(pArr[2*C - i], R - i) : 1;//如果以i为中心的递归范围的左边前一个位置strArr[i+pArr[i]]和右边后一个位置strArr[i-pArr[i]]相等,则递归半径+1while(i+pArr[i] < strArr.length && i - pArr[i] >= 0 && strArr[i+pArr[i]] == strArr[i-pArr[i]]) {pArr[i] ++;}if(pArr[i] + i > R) {R = pArr[i] + i;C = i;}//这里需要写个if,因为要获取end,endif(pArr[i] > max) {max = pArr[i];end = i + pArr[i]-1;}//max = Math.max(max, pArr[i]);}//最大递归范围的终点是end,最大的半径是(max-1)/2,则范围为end - 2*(max-1)~end//end对应原数组的位置就是(end-1)/2,这里注意的是subString这个方法的范围是[start,end)前闭后开的区间//原数组中的每个位置在新的manacher数组中的下标是2*i+1,在新数组中第一个位置为end-2*(max-1)+1,对应的原数组的下标为(end-2*(max-1))/2//(end-2*(max-1))/2=end/2-(max-1)=end/2-max+1//而结束位置为end,对应原数组的位置为(end-1)/2,但是第二个参数是开区间,所以应该写成(end-1)/2 + 1= (end+1)/2return s.substring(end/2-max+1,(end+1)/2);}public static String getManacherString(String s) {char[] sArr = s.toCharArray();char[] strArr = new char[sArr.length * 2 + 1];strArr[0] = '#';for(int i = 1; i < strArr.length; i++) {if((i & 1) == 1) {strArr[i] = sArr[i/2];} else {strArr[i] = '#';}}return String.valueOf(strArr);}}

9383a517afcb4d949a908bed068f140b.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【生日视频制作】滑行飞机机身改字,轻松修改文字AE模板修改文字软件生成器教程特效素材【AE模板】

飞机机身生日视频制作教程AE模板改文字特效广告生成器素材玩法 怎么如何做的【生日视频制作】滑行飞机机身改字&#xff0c;轻松修改文字AE模板修改文字软件生成器教程特效素材玩法【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或…

基于Java+SpringBoot+Vue的知识管理系统

基于JavaSpringBootVue的知识管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 哈喽…

利用“2+1链动模式小程序AI智能名片S2B2C商城源码”优化企业参与外部社群策略

摘要&#xff1a;在当今数字化时代&#xff0c;企业参与外部社群已成为其市场扩张、品牌塑造及用户增长不可或缺的一环。然而&#xff0c;面对浩如烟海的社群类型&#xff0c;包括行业论坛、地区性论坛、特定兴趣爱好的论坛以及短视频网站等&#xff0c;如何精准选择并有效介入…

计算机网络-PIM-SM组播实验

一、概述 目前为止我们学习了组播转发网络中的PIM协议&#xff0c;PIM模型有两种&#xff1a; PIM-DM主要使用在网络规模较小&#xff0c;用户集中的组播网络中。 PIM-SM主要使用在网络规模较大&#xff0c;用户较为分散的组播网络中。PIM-SM基于组播模型又可以分为PIM-SM&…

重装系统前如何备份数据?让重装无后顾之忧

在日常使用电脑的过程中&#xff0c;有时我们可能需要重装系统以解决一些难以通过常规手段解决的问题。然而&#xff0c;在重装系统之前&#xff0c;最重要的一步就是备份数据&#xff0c;以防止重要信息的丢失。本文将详细介绍如何在重装系统前进行数据备份&#xff0c;确保您…

周报(8.12-8.18)

周报(8.12-8.18) 本周工作 DD-Net学习与代码复现 DD-Net网络结构如上图所示。DD-Net也有一个为处理OpenFWI数据的版本&#xff1a;DD-Net70&#xff1a; 与传统DL-FWI不同的是&#xff0c;DD-Net同时拥有两个解码器&#xff0c;第一个解码器的目标是传统的速度模型&#xff0…

力扣第71题:简化路径 放弃栈模拟,选择数据流√(C++)

目录 题目 思路 解题过程 复杂度 Code 题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff…

医生隐瞒病情属于什么行为?

根据《民法典》第一千二百二十二条的规定&#xff0c;患者在诊疗活动中受到损害&#xff0c;有下列情形之一的&#xff0c;推定医疗机构有过错&#xff1a;   &#xff08;一&#xff09;违反法律、行政法规、规章以及其他有关诊疗规范的规定&#xff1b;   &#xff08;二…

LLMs 基础知识 | BERT 模型族

本文主要文章是解决蚂蚁金服携手上海财经大学&#xff0c;共同出具大预言模型白皮书一文中的部分模型问题。 01 Slef-Attention 注意力机制&#xff0c;注意力权重可以看作是输入对输出的重要程度。这里注意&#xff0c;所谓注意力&#xff0c;即模型认为该单词有多值得被注意…

基于BlockQueue的生产消费模型及Linux中的信号量

基于BlockQueue的生产消费模型 Task.hpp #pragma once#include<cstdio> #include<iostream> #include<string> #include<functional>using namespace std; class CalTask {using func_tfunction<int(int,int,char)>;//typedef function<int(…

妙用 Batch,StarRocks 存算分离实时性能起飞

前言 当大家提到存算分离时&#xff0c;尤其是考虑后端使用 AWS S3 为代表的对象存储作为数据存储时&#xff0c;直觉就是性能拉胯&#xff0c;只能用作批量数据处理场景&#xff0c;至少这是我在跟很多用户交流时获得的第一感受。而 StarRocks 作为一个具备强实时性数据分析引…

Vue实现zip压缩下载

1&#xff0c;安装依赖npm //jszip是一个用于创建、读取和编辑.zip文件的JavaScript库 https://stuk.github.io/jszip/ npm install jszip https://www.npmjs.com/package/file-saver npm install file-saver 2&#xff0c;在所需的页面中引入对应包 import JSZip from &…

【启明智显分享】智能音箱AI大模型一站式解决方案重塑人机交互体验,2个月高效落地

2010年左右&#xff0c;智能系统接入音箱市场&#xff0c;智能音箱行业在中国市场兴起。但大潮激荡&#xff0c;阿里、小米、百度三大巨头凭借自身强大的资本、技术、粉丝群强势入局&#xff0c;形成三足鼎立态势。经过几年快速普及&#xff0c;智能音箱整体渗透率极高&#xf…

【课件分享】电子档案库房——构筑档案数字资源长期保存的安全防线

关注我们 - 数字罗塞塔计划 - 如此重磅的会议&#xff0c;如此高能的干货&#xff0c;小编已经迫不及待第一时间分享给大家&#xff0c;一起来看看杨博士在学术交流活动上的演讲内容吧。 01 课件分享 一、背景现状 二、总体设计 详细视频请在公众号中观看 三、解决方案 四、应…

汽车线束品牌服务商推荐-力可欣:致力于汽车连接线束和汽车连接器的开发、生产和应用

汽车线束品牌服务商推荐-力可欣&#xff1a;致力于汽车连接线束和汽车连接器的开发、生产和应用

安卓13 背光调节非线性问题处理,调节范围不正常问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码修改 4.彩蛋 1.前言 我们看看现在的版本的亮度图 2.问题分析 当背光亮度设置为0%时,每次按下亮度增加键或者 input keyevent BRIGHTNESS_UP,亮度UI的增幅较大,首次按下后亮度平滑提升至大约55%,随后继…

深入调研亚马逊云科技AI平台Amazon Bedrock热门开发功能

国际数据公司&#xff08;IDC&#xff09;在2024 年 8 月发布了《 中国大模型平台市场份额&#xff0c; 2023 &#xff1a;大模型元年——初局 》调研报告 。IDC的数据显示&#xff0c;2023年中国大模型平台及相关应用市场规模达惊人的17.65亿元人民币&#xff0c;且科学计算大…

售后更新出现问题分析-幂等和防重

2024-08-27 早上测试提交BUG,说售后单状态流转不对&#xff0c;吓得我一激灵&#xff0c;赶紧打开IDEA 查看代码&#xff0c;发现售后这块代码没有动过呀&#xff0c;咋回事&#xff1f; 流程是这样的&#xff1a; 测试模拟用户下单&#xff0c;提交订单后付款&#xff0c;然后…

基于顺序表实现通讯录功能项目

本文通过顺序表实现通讯录的功能&#xff0c;增删查改数据 首先实现顺序表的功能&#xff0c;再用顺序表实现通讯录的功能 顺序表中的成员为一个结构体对象con&#xff0c;自定义的类型&#xff0c;里面包含着联系人的姓名性别年龄电话地址 seqlist.h&#xff1a;顺序表头文…

摩尔线程 × 智汇云舟|打造视频孪生国产解决方案

近日&#xff0c;摩尔线程与国内数字孪生头部企业和视频孪生首倡者智汇云舟达成深度战略合作&#xff0c;双方将在技术融合、产品共创和市场推广领域加强合作&#xff0c;共同研发面向未来的视频孪生国产化解决方案&#xff0c;推动视频孪生技术在国内关键领域的应用落地&#…