题目:

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

中心扩散法

从每一个位置向两边扩散,记录最大回文串的长度和起始位置

  • 首先向左边扩散,如果左边的字符与当前字符相同,则 left--,回文串长度len++,否则退出当前左边扩散;
  • 然后向右边扩散,如果右边的字符与当前字符相同,则 right++,回文串长度len++,否则退出当前右边扩散;
  • 最后向左右两边扩散,如果左边和右边的字符相同,则left--,right++,回文串长度加2,否则退出当前扩散。

更新回文串的最大长度和起始位置,将当前回文串的长度置为1,扩散结束后,返回最大回文串--

s.substring(maxstart + 1, maxstart + 1 + maxlen):由于之前遍历结束后已经将left的值更新过才会不满足While条件,这时left已经在起始位置的前一个位置,故这里需要加1,结束位置也同样需要加1,并且这里的substring取值是左开右闭区间。
例如:

直观一点:

代码:

 1 class Solution {
2 public String longestPalindrome(String s) {
3 //定义回文长度是初始值
4 int len = 1;
5 int n = s.length();
6 int left = 0,right = 0;
7 //记录最长回文的起始位置和最大长度
8 int maxlen = 0, maxstart = 0;
9 for(int i = 0; i < n; i++){
10 left = i - 1;
11 right = i + 1;
12 //向左扩展
13 while(left >= 0 && s.charAt(left) == s.charAt(i)){
14 left--;
15 len++;
16 }
17 //向右扩展
18 while(right <= n-1 && s.charAt(right) == s.charAt(i)){
19 right++;
20 len++;
21 }
22 //向左右两边扩展
23 while(left >= 0 && right <= n-1 && s.charAt(left) == s.charAt(right)){
24 right++;
25 left--;
26 len += 2;
27 }
28 //如果当前会问长度大于最大长度,则更新最大长度和起始位置
29 if(len > maxlen){
30 maxlen = len;
31 maxstart = left;
32 }
33 //将当前长度重置
34 len = 1;
35 }
36 return s.substring(maxstart + 1, maxstart + 1 + maxlen);
37 }
38 }

力扣5(java)-最长回文串(中等)的更多相关文章

  1. 力扣(LeetCode)验证回文串 个人题解(C++)

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  2. 力扣(LeetCode)验证回文串 个人题解

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  3. 力扣算法:125-验证回文串,131-分割回文串---js

    LC 125-验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 注:回文串是正着读和反着读都一样的字符串. ...

  4. 算法笔记_032:最长回文串(Java)

    目录 1 问题描述 2 解决方案 2.1 中心扩展法 2.2 Manacher算法   1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文 ...

  5. Java实现最长回文串

    1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文串的中心位置,然后,再在该位置上分别向左和向右扩展,记录并更新得到的最长回文串的长度. ...

  6. Java实现 LeetCode 409 最长回文串

    409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...

  7. (最长回文串 模板) 最长回文 -- hdu -- 3068

    http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  8. Manacher(输出最长回文串及下标)

    http://acm.hdu.edu.cn/showproblem.php?pid=3294 Girls' research Time Limit: 3000/1000 MS (Java/Others ...

  9. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  10. ACM题目————最长回文串

    Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等   Input 输入有多组cas ...

随机推荐

  1. 软件推荐: Sourcetree git软件

    注意事项: 破解的时候,json文件目录不是软件exe所在目录,是数据目录 %LocalAppData%\Atlassian\SourceTree 还有就是第一次运行弹出个 有个插件要不要用,选第3个 ...

  2. Nodejs 命令行调用 exec 与 spawn 差异--- 解决 spawn yarn ENOENT error

    Nodejs 命令行调用 exec 与 spawn 差异 比如在前端工程项目中 Nodejs 要调用命令行命令如: yarn electron:build exec 调用 yarn 命令,为了能使命令 ...

  3. 数据好合: Argilla 和 Hugging Face Spaces 携手赋能社区合力构建更好的数据集

    最近,Argilla 和 Hugging Face 共同 推出 了 Data is Better Together 计划,旨在凝聚社区力量协力构建一个对提示进行排名的偏好数据集.仅用几天,我们就吸引了 ...

  4. HttpClient 3.1 发送 https 请求跳过验证

    环境: 依赖: <dependency> <groupId>commons-httpclient</groupId> <artifactId>commo ...

  5. Ubuntu安装OpenOffice

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/quantum7/article/det ...

  6. BWO白鲸优化算法

    白鲸算法 ​ 白鲸算法(BWO)是一种新的元启发式算法,是一种基于群体的算法,其灵感来自于白鲸的行为,包括游泳,猎物和鲸落.在BWO的数学模型中构建了勘探,开发和鲸落阶段,并在开发阶段利用Levy飞行 ...

  7. 一行代码 python 证件照换底色

    安装所需模块 pip install OpenCV-python pip install cvzone pip install mediapipe 代码 import cv2 import cvzon ...

  8. #矩阵乘法#洛谷 3702 [SDOI2017]序列计数

    题目链接 分析 考虑容斥,用总方案减去全是合数的方案数, 可以发现 \(n\) 很大,\(p\) 很小,直接用矩阵乘法转移即可 代码 #include <cstdio> #include ...

  9. #平衡树,set#洛谷 2286 [HNOI2004]宠物收养场

    题目 分析 由于宠物被领养者领养和领养者领养宠物操作是一样的, 考虑建两棵平衡树维护操作,以领养者领养宠物为例 若当前没有宠物,就将领养者加入平衡树中, 否则选择最接近的特点值的宠物统计答案并删除该宠 ...

  10. 使用OHOS SDK构建flac

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/xiph/flac 进入 ...