前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【算法沉淀】最长回文子串

【算法沉淀】最长回文子串

作者头像
苏泽
发布于 2024-03-10 01:20:51
发布于 2024-03-10 01:20:51
7900
代码可运行
举报
运行总次数:0
代码可运行

5. 最长回文子串

提示

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

子串

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "cbbd"
输出:"bb"

提示:

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

题目解析: 给定一个字符串s,需要找到s中最长的回文子串。回文字符串是指正序和反序都相同的字符串。

思路如下:

  1. 初始化两个指针left和right,分别表示当前考虑的子串的左右边界。初始时,left=0,right=0。
  2. 使用一个变量max_len来记录最长回文子串的长度,初始值为0。同时使用一个变量start来记录最长回文子串的起始位置,初始值为0。
  3. 使用两层循环来枚举所有可能的子串。外层循环使right指针从0到字符串末尾,内层循环使left指针从0到right。
  4. 对于每个子串,检查其是否为回文。如果是,并且其长度大于max_len,则更新max_len和start。
  5. 在检查子串是否为回文时,可以使用双指针法。初始化两个指针p1和p2,分别指向子串的首尾。如果p1和p2指向的字符相同,则将p1向右移动一位,p2向左移动一位。如果p1和p2指向的字符不同,则说明该子串不是回文。
  6. 在遍历完所有子串后,最长回文子串的起始位置为start,长度为max_len。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Solution {
    public String longestPalindromicSubstring(String s) {
        if (s == null || s.length() < 1) {
            return "";
        }
        int start = 0, end = 0;
        for (int i = 0; i < s.length(); i++) {
            int len1 = expandAroundCenter(s, i, i);
            int len2 = expandAroundCenter(s, i, i + 1);
            int len = Math.max(len1, len2);
            if (len > end - start) {
                start = i - (len - 1) / 2;
                end = i + len / 2;
            }
        }
        return s.substring(start, end + 1);
    }

    private int expandAroundCenter(String s, int left, int right) {
        int L = left, R = right;
        while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
            L--;
            R++;
        }
        return R - L - 1;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【每日leetcode】18.最长回文子串
1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成
一条coding
2021/08/12
3010
【每日leetcode】18.最长回文子串
Leetcode 5:最长回文子串(最详细的解法!!!)[通俗易懂]
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
全栈程序员站长
2022/09/03
6520
Leetcode 5:最长回文子串(最详细的解法!!!)[通俗易懂]
中心扩展法求回文子串的长度
回文串是指正读和反读结果相同的字符串,如"level"、“deed”。本文介绍一种利用中心扩展法求解最长回文子串的方法。
GeekLiHua
2025/01/21
680
面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、最短回文串
算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。
johnny666
2024/09/19
1210
005. 最长回文子串 | Leetcode题解
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
苏南
2020/12/16
4480
005. 最长回文子串 | Leetcode题解
【LeetCode题解-005】Longest Palindrome Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
周三不加班
2019/09/04
4510
【LeetCode题解-005】Longest Palindrome Substring
【力扣算法08】之 5. 最长回文子串 python
我们可以使用动态规划来解决这个问题。首先,定义一个二维数组 dp,其中 dp[i][j] 表示从索引 i 到索引 j 的子串是否是回文串。如果子串是回文串,则 dp[i][j] 的值为 True,否则为 False。
全栈若城
2024/02/29
4170
【力扣算法08】之 5. 最长回文子串 python
算法修炼之筑基篇——筑基二层初期(解决最长回文子串问题,马拉车(manacher)算法模板)
通过填充动态规划表格 dp,可以找到最长回文子串的长度和起始位置。该方法的时间复杂度为 O(n^2)。
命运之光
2024/03/20
2440
算法修炼之筑基篇——筑基二层初期(解决最长回文子串问题,马拉车(manacher)算法模板)
LeetCode 刷题记录 1-5
给定一个整数数组 nums 和一个目标值 target ,找出数组中和为目标值的两个数,并返回它们的数组下标。
口仆
2020/08/17
4710
LeetCode-5 最长回文子串
今天我们学习第5题最长回文子串,这是一个字符串的中等题,像这样字符串的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。
用户3470542
2019/06/26
4960
LeetCode-5 最长回文子串
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。啥是回文串?就是字符可以看成是对称的,从左往右读和从右往左读是一样意思,比如:上海自来水来自海上。来看下下面的示例:
用户4456933
2021/06/01
6400
LeetCode【5】-- 最长回文子串(马拉车算法)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring,著作权归领扣网络所有。
秦怀杂货店
2022/02/15
2790
LeetCode【5】-- 最长回文子串(马拉车算法)
LeetCode 5. Longest Palindromic Substring分析
判断一个字符串是不是回文串,可以用动态规划方法 dp[i][j]:表示i到j的字符串,是不是回文串,是就为true,不是就为false 那么当s[i] == s[j]的时候,dp[i][j] = dp[i+1][j-1],这是根据回文串的特点,比较容易理解的,比如我们知道bab是回文串,如果a = a,那么ababa也就是回文串! 所以我们可以用动态规划法求出最长回文串,然后也知道了他的起始位置,i和j,所以就比较容易求解了,唯一注意的问题是,我们得倒着求,而不能跟往常一样顺着求解,因为状态转移方程的依赖关系,是倒着依赖的。
desperate633
2018/08/22
2920
扩展kmp求最长回文子串_算法-字符串之最长回文子串
首先介绍一下什么叫回文串,就是正着读和倒着读的字符顺序都是一样的,eg:level,noon。而回文子串,顾名思义,就是主串中满足回文性质的子串。
全栈程序员站长
2022/08/23
8350
【Python 千题 —— 算法篇】寻找最长回文子串
回文串是指一个字符串从左到右和从右到左读都是一样的。寻找一个字符串中的最长回文子串是许多经典算法问题之一,广泛应用于文本处理、数据分析和计算生物学等领域。
繁依Fanyi
2024/09/09
3080
【Python 千题 —— 算法篇】寻找最长回文子串
Leetcode 5: 最长回文子串
另外的一个想法是,既然要判断最长的回文子串,那首先要回文。要回文,首先要相等。因此先跑一遍,用字典记录下所有字符以及其相等的位置。(已知字符仅包括数字和英文字母)
千灵域
2022/06/17
2150
LeetCode - 最长回文子串
同样是三年前做的一道题目,很经典的字符串领域的算法题,求字符串的最长回文子串,当时我也是提交了好几次,并且看了相关的资料以后,才成功通过。
晓痴
2019/07/24
6760
LeetCode - 最长回文子串
最长回文子串——马拉车算法
针对最长回文子串相关的问题,马拉车算法应该是比较通用的解法,今天我们就来具体看看这个算法。
健程之道
2020/03/11
7870
5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
张伦聪zhangluncong
2022/10/26
8620
【字符串】最长回文子串 ( 蛮力算法 )
" 回文串 ( Palindrome ) " 是 正反都一样的字符串 , abccba , 001100 等字符串 ;
韩曙亮
2023/03/29
9970
【字符串】最长回文子串 ( 蛮力算法 )
推荐阅读
相关推荐
【每日leetcode】18.最长回文子串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文