5. 最长回文子串

news/2024/7/5 3:25:15

文章目录

    • 题目描述
    • 做题思路
    • 代码实现
    • 题目链接

题目描述

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

    示例 1:

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

    输入:s = “cbbd”
    输出:“bb”

    提示:

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


做题思路

中心扩散法

我们假设每一个位置上的元素都有可能产生最长的回文串

当前位置为 i

我们先判断左边和i相等的

在判断i右边和i相等的

左后我们在判断左右两边相等的元素

这就叫做中心扩散法


动态规划法:减少不必要的重复比较

boolean[][] dp=new boolean[n][n];
dp[l][r] 表示l到r这段是回文
想一下,如果我们在判断了  s.charAt(l)==s.charAt(r)之后,我们是不是只需要在判断一下
    s.charAt(l+1)==s.charAt(r-1)  是否是回文就行了?这样就减少了呃重复的判断

代码实现

//中心扩散法
class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()<2)return s;
        int len=s.length();
        int maxStart=0;
        int maxlen=0;
        int strLen=1;
        for(int i=0;i<len;i++){
            int left=i-1;
            int right=i+1;
            while(left>=0 && s.charAt(left)==s.charAt(i)){
                left--;
                strLen++;
            }
            while(right<len && s.charAt(right)==s.charAt(i)){
                right++;
                strLen++;
            }
            while(left>=0 && right<len && s.charAt(left)==s.charAt(right)){
                left--;
                right++;
                strLen+=2;
            }
            if(strLen>maxlen){
                maxlen=strLen;
                maxStart=left;
            }
            strLen=1;
        }
        return s.substring(maxStart+1,maxlen+maxStart+1);
    }
}
//动态规划法
class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()<2)return s;
        int len=s.length();
        boolean[][] dp=new boolean[len][len];
        int maxStart=0;
        int maxEnd=0;
        int maxLen=0;
        for(int r=1;r<len;r++){
            for(int l=0;l<r;l++){
                if((s.charAt(l)==s.charAt(r))&&(r-l<=2 || dp[l+1][r-1]))
                {
                    dp[l][r]=true;
                    if(r-l+1 > maxLen){
                        maxLen=r-l+1;
                        maxStart=l;
                        maxEnd=r;
                    }
                }
            }
        }
        return s.substring(maxStart,maxEnd+1);
    }
}

题目链接

5. 最长回文子串


http://lihuaxi.xjx100.cn/news/91364.html

相关文章

C语言中的字符串转数字函数常见问题详解

目录C语言中的字符串转数字函数常见问题详解字符串转整形atoi函数字符串转长整形strtol函数&#xff0c;C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型&#xff1a; int atoi(const char *nptr);该函数是把字符串转换成整型数的一个函数&#xff0…

Django后端开发:MVC 和 MTV以及动态路由、静态路由、自定义converters

目录 一、MVC和MTV 二、静态路由和动态路由 一、通过正则表达式来实现静态和动态路由 二、不适用正则表达式来实现静态和动态路由 一、常用的四种url路由 二、自定义转换器url路由类型 一、MVC和MTV MVC控制器Contorller部分&#xff0c;由Django框架的urlconf来实现 意思就是…

2022 需求工程复习真题【太原理工大学】

哈喽大家好&#xff0c;本篇是我整理出来的一些需求工程历年选择、填空真题&#xff0c;主要是针对期末考试用的&#xff0c;其余模块持续更新中&#xff0c;仅供参考&#xff01;>_< 目录 一、选择题 二、填空题 一、选择题 1.项目的前景和范围文档、用户需求文档都被…

Python 爬虫详解

一、爬虫概述 1、爬虫简介 要对数据进行处理和分析&#xff0c;首先就要拥有数据。在当今这个互联网时代&#xff0c;大量信息以网页作为载体&#xff0c;网页也就成了一个很重要的数据来源。但是&#xff0c;网页的数量非常之多&#xff0c;如果以人工的方式从网页上采集数据…

【SSM入门(二)】:setter依赖注入【超简单】

目录 &#x1f31e;测试结果 &#x1f31e;实现步骤 &#xff08;1&#xff09;建立空项目 ​编辑 &#xff08;2&#xff09;建立一个模块&#xff1a;maven项目 &#xff08;3&#xff09; 建立数据层dao和业务层service的接口和实现类文件 &#xff08;4&#xff09;UserDao…

WEB在线客服系统(websocket+Golang)

真正的大师,永远都怀着一颗学徒的心&#xff01; 一、项目简介 WEB在线客服系统&#xff0c;项目使用golang开发的&#xff0c;手机和电脑上都是可以自适应的。可以展示在网页页面右下角&#xff0c;只需要一段js代码&#xff0c;就可以实现功能。缩小后以悬浮的形式保留。 …

jQuery中的ajax

jquery中ajax XMLHttpRequest用法复杂&#xff0c;所以jquery对他进行封装&#xff0c;极大地降低了ajax的使用难度jquery对ajax发起请求三种方法 (1) $.get() 获取数据 (2) $.post() 提交数据 (3) $.ajax() 获取和提交数据 $.get() 语法&#xff1a; $.get(url,[data],[cal…

matlab画图(一、柱状图)

&#x1f40b; 前言&#xff1a;柱状图利用柱子的高度&#xff0c;反映数据的差异。肉眼对高度差异很敏感&#xff0c;辨识效果非常好。柱状图的局限在于只适用中小规模的数据集。 &#x1f42c; 目录: 一、数据获取二、简单柱状图三、分组柱状图四、堆叠柱状图 一、数据获取…