力扣5(java)-最长回文串(中等)
题目:
给你一个字符串 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,扩散结束后,返回最大回文串--

直观一点:

代码:
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)-最长回文串(中等)的更多相关文章
- 力扣(LeetCode)验证回文串 个人题解(C++)
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- 力扣(LeetCode)验证回文串 个人题解
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- 力扣算法:125-验证回文串,131-分割回文串---js
LC 125-验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 注:回文串是正着读和反着读都一样的字符串. ...
- 算法笔记_032:最长回文串(Java)
目录 1 问题描述 2 解决方案 2.1 中心扩展法 2.2 Manacher算法 1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文 ...
- Java实现最长回文串
1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文串的中心位置,然后,再在该位置上分别向左和向右扩展,记录并更新得到的最长回文串的长度. ...
- Java实现 LeetCode 409 最长回文串
409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...
- (最长回文串 模板) 最长回文 -- hdu -- 3068
http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory ...
- Manacher(输出最长回文串及下标)
http://acm.hdu.edu.cn/showproblem.php?pid=3294 Girls' research Time Limit: 3000/1000 MS (Java/Others ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- ACM题目————最长回文串
Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组cas ...
随机推荐
- 【预训练语言模型】BERT原理解析、常见问题和微调实战
一.BERT原理 1.概述 背景:通过在大规模语料上预训练语言模型,可以显著提高其在NLP下游任务的表现. 动机:限制模型潜力的主要原因在于现有模型使用的都是单向的语言模型 ...
- Kettle实战视频教程
kettle实战视频教程 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!!个人网站: http://w ...
- 反转链表——java
给定一个链表,请你将链表反转过来. 举例:原链表:1→2→3→4→5→null 反转链表:5→4→3→2→1→null 代码: package algorithm_niuke; public clas ...
- 【STM32F4 HAL】MPU6050食用
关于MPU6050模块的食用>_<(本人比较菜,写的不好或有错误的地方欢迎大佬指出) 最近学校冬令营发了个MPU6050模块,第一次弄也花了我花了不少时间,于是就把其中一些步骤以及要点简单 ...
- 学会Promise,看这里!!!
前言 众所周知,在JavaScript的世界中,代码都是单线程执行的.由于这个原因,JavaScript中的耗时操作,如网络操作.浏览器事件等,都需要异步执行.这也导致在JavaScript中异步操作 ...
- R语言安装教程
R 语言官方网站:The Comprehensive R Archive Network 官方镜像站列表:CRAN - Mirrors 一.官网下载R安装包 下载地址为:Index of /bin 进 ...
- ElasticSearch8 - SpringBoot整合ElasticSearch
前言 springboot 整合 ES 有两种方案,ES 官方提供的 Elasticsearch Java API Client 和 spring 提供的 [Spring Data Elasticse ...
- 如何用LOTO示波器实测LC串联谐振?
一个电感和一个电容串联,在某个特定的频率,就会发生谐振,这个频率就是谐振频率.串联谐振电路有如下特点: 谐振时整个电路阻抗呈电阻性,阻抗最小,电流达到最大: 谐振时电感和电容两端的电压达到最大. 上图 ...
- LOTO示波器客户应用案例展示
LOTO示波器客户应用案例展示 LOTO示波器以软件功能为核心,采用独特的积木式可扩展的硬件架构,为多行业的电子电路研发工程师提供高性价比的解决方案.我们初步汇总了一些客户实测的应用案例展示如下: 1 ...
- elementui中下拉框(select)抖动问题
将下面样式加入即可 // 处理下拉框中抖动 .el-select .el-input__inner { vertical-align: bottom !important; } 如设置了size属性, ...