【CT】LeetCode手撕—5. 最长回文子串

news2024/11/24 18:34:45

目录

  • 题目
  • 1-思路
  • 2- 实现
    • ⭐5. 最长回文子串——题解思路
  • 3- ACM实现


题目

  • 原题连接:5. 最长回文子串

1-思路

  • 子串的定义:子串是原始字符串的一个连续部分
  • 子序列的定义:子序列是原始字符串的一个子集
  • 记录最长回文子串的起始位置以及其长度,最终通过下标截取

动规五部曲

  • 1.定义 dp 数组
    • boolean dp[i][j] 代表区间在 [i,j] 的子串是否是回文
  • 2.递推公式
    • nums[i] == nums[j] 的前提下
    • ① 当 j-1 - (i+1) +1 <2 时,也就是 区间严格小于 2 的时候 j-i<3dp[i+1][j-1] = true
    • ② 否则 dp[i][j] = dp[i+1][j-1]
  • 3.初始化
    • 单个字符一定是回文串dp[i][i] = true
  • 4. 遍历
    • 在得到一个 dp[i][j]true 时,就记录字符串的起始位置和长度
    • 由于 dp[i][j] 从左下角的位置推导来,因此遍历的方式以列遍历,先遍历列再遍历行
    • 由递推公式可以得到,dp[i][j] 由左下角的元素推导而来,因此 i 的遍历顺序是从 s.length() 开始遍历

2- 实现

⭐5. 最长回文子串——题解思路

在这里插入图片描述

class Solution {
    public String longestPalindrome(String s) {
        if(s.length()<2){
            return s;
        }

        int maxLen = 1;
        int begin = 0;

        //1. 定义 dp数组
        // dp[i][j] 代表区间[i,j]内的子串是否回文
        boolean[][] dp = new boolean[s.length()][s.length()];


        // 2.递推公式
        // if(s.charAt(i)==s.charAt(j)) {dp[i][j] = dp[i+1][j-1];}

        // 3.初始化
        // dp[i][i] = true;
        for(int i = 0 ; i < s.length();i++){
            dp[i][i] = true;
        }

        // 4.遍历顺序
        for(int i = s.length()-1 ; i >= 0 ;i--){
            for(int j = 0 ; j < s.length();j++ ){
                if(s.charAt(i) == s.charAt(j)){
                    // 单个字符 没意义
                    if(j-i<3){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];
                    }
                }

                // 只要 dp[i][j] == true 成立,就表示 子串[i..j] 回文,此时记录长度和起始位置
                if(dp[i][j] && j-i+1>maxLen){
                    maxLen = j-i+1;
                    begin = i;
                }
            }
        }
        return s.substring(begin,begin+maxLen);
    }
}

3- ACM实现

public class maxPlaindrome {

    public static String maxPlaindrome(String str){
        int maxLen = 1;
        int begin = 0;
        int len = str.length();
        if(len<2){
            return str;
        }

        //1.定义dp
        boolean[][] dp = new boolean[len][len];

        //2.递推
        // if(s.charAt(i) == s.charAt(j)){ if(j-i>3){dp[i][j]=true;}else{dp[i][j] =dp[i+1][j-1];}}

        // 初始化
        for(int i = 0 ; i < len;i++){
            dp[i][i] = true;
        }

        // 4.遍历
        for(int i = len-1;i>=0;i--){
            for(int j = 1;j<len;j++){
                if(str.charAt(i) == str.charAt(j)){
                    if(j-i<3){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];
                    }
                }
                if(dp[i][j] && j-i+1>maxLen){
                    maxLen = j-i+1;
                    begin =i;
                }
            }
        }
        return str.substring(begin,begin+maxLen);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入字符串");
        String str = sc.nextLine();
        System.out.println("最长回文子串为"+maxPlaindrome(str));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5小程序视频编辑解决方案,广泛适用,灵活部署

如何在微信小程序、网页、HTML5等WEB场景中实现轻量化视频制作&#xff0c;满足多样化的运营需求&#xff0c;一直是企业面临的挑战。美摄科技凭借其在视频编辑领域的深厚积累和创新技术&#xff0c;为企业量身打造了一套H5/小程序视频编辑解决方案&#xff0c;助力企业轻松应对…

批量文件重命名技巧:轻松替换删除文件夹名中的字母,实现高效文件管理新境界

在数字化时代&#xff0c;我们每天都会面对大量的文件和文件夹。无论是工作文档、学习资料还是个人收藏&#xff0c;文件命名的规范性都显得尤为重要。然而&#xff0c;手动一个一个去修改文件名&#xff0c;不仅耗时耗力&#xff0c;还容易出错。那么&#xff0c;有没有一种方…

C++并发之定时互斥(std::timed_mutex)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 lock3.3 try_lock3.4 try_lock_for3.5 try_lock_until3.6 unlock 1 概述 定时互斥是一种时间可锁定的对象&#xff0c;它设计用于在代码的关键部分需要独占访问时发出信号&#xff0c;就像常规互斥一样&#xff0c;但还支持定…

树莓派4B学习笔记8:开机自启动Python脚本_kill关闭后台脚本

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 紧接着上篇文章学习的串口通信,今日学习如何让树莓派开机…

zabbix自定义监控mysql状态和延迟

zabbix自定义监控mysql状态和延迟 文章目录 zabbix自定义监控mysql状态和延迟zabbix自定义监控mysql状态配置主从配置自定义监控添加监控项添加触发器模拟测试异常 zabbix自定义监控mysql延迟配置自定义监控添加监控项添加触发器测试 zabbix自定义监控mysql状态 配置主从 1.安…

H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程

H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程 搭建教程 环境&#xff1a;Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 上传源码至网站根目录&#xff0c;创建并导入数据库 数据库信息修改&#xff1a;/config/database.php 网站运行目录/public 配置文件加入&#xff08;从24行…

PHP和Mysql前后端交互效果实现

一、连接数据库基本函数 mysqli_connect(); 作用&#xff1a;创建数据库连接&#xff0c;打开一个新的mysql的连接。传参顺序&#xff1a;数据库地址、数据库账号、数据库密码 <?phpecho mysqli_connect("localhost",root,root) ?> /*结果&#xff1a;F…

基于springboot实现中山社区医疗综合服务平台系统项目【项目源码+论文说明】

基于springboot实现中山社区医疗综合服务平台系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;居民信息因为其管理内容繁杂&…

数智技术教学解决方案

前言 随着大数据、云计算、人工智能等技术的迅猛发展&#xff0c;教育领域正迎来一场深刻的变革。这场变革不仅仅是教学方式的转变&#xff0c;更是教育理念、教学模式乃至教育生态系统的重塑。唯众作为教育技术领域的领军企业&#xff0c;深刻认识到数智技术在教学中的重要性&…

2024大交通场景空间策展洞察报告

来源&#xff1a;邻汇吧&万一商管 近期历史回顾&#xff1a; 2024国内工商业储能市场研究报告.pdf 2023幸福企业白皮书.pdf 2024年欧亚地区移动经济报告.pdf 内容供应链变革 2023人工智能与首席营销官&#xff08;CMO&#xff09; AI科技对PC产业的影响.pdf 金融业数据应用…

基于YOLO检测算法(单检测器网络+多视频输入)设计与实现

在单摄像头目标检测的基础上&#xff0c;实现单网络多线程的实时目标检测。 1&#xff0c;应用场景 在安防领域&#xff0c;YOLO的多摄像头实时目标检测应用具有以下特点和优势&#xff1a; 实时性能&#xff1a; YOLO算法以非常高的速度运行&#xff0c;能够实现实时目标检测…

ComfyUI 集成混元DIT(comfyui-hydit)

最近腾讯官方推出了ComfyUI插件comfyui-hydit 。是一个专门为腾讯的 Hunyuan-DiT 模型设计的自定义节点和工作流。本文主要介绍如何通过ComfyUI来运行腾讯新出的支持中文提示词的混元文生图大模型Hunyuan-DiT 环境准备 插件 从腾讯混元DIT 源码库获取插件源码&#xff1a; h…

深圳某老牌地产公司曝3小时裁所有员工

大家好&#xff01; 我是老洪&#xff0c;今日&#xff0c;我偶然间瞥见一则新闻&#xff0c;心头一震&#xff0c;惊讶之情难以言表。 据多家权威媒体纷纷报道&#xff0c;近日&#xff0c;深圳一家历史悠久的地产巨头&#xff0c;竟然在短短三小时内&#xff0c;果断地挥别了…

算法课程笔记——线段树维护哈希

算法课程笔记——线段树维护哈希 提前空出来

苹果AI时代:Apple Intelligence能否守护隐私与未来?

最近&#xff0c;苹果展示了其人工智能底牌&#xff0c;推出了Apple Intelligence(重新定义AI)&#xff0c;这是一套基础模型&#xff0c;将极大地改变苹果消费者使用其产品的方式。 虽然仍需在实际中证明自己&#xff0c;但它是一个强有力的演示&#xff0c;至少从普通用户的…

防火墙对于企业究竟起到哪些作用?

在当今数字化时代&#xff0c;企业网络安全已成为关乎企业生存与发展的战略要务。防火墙作为网络安全的基石&#xff0c;对于构建企业网络的安全防护体系至关重要。本文将深入剖析防火墙在企业网络安全中的多重价值&#xff0c;并结合具体案例&#xff0c;探讨如何科学运用防火…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第40课-实时订阅后端数据 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

pdf格式转成jpg图片,pdf格式如何转jpg

pdf转图片的方法&#xff0c;对于许多人来说可能是一个稍显陌生的操作。然而&#xff0c;在日常生活和工作中&#xff0c;我们有时确实需要将pdf文件转换为图片格式&#xff0c;以便于在特定的场合或平台上进行分享、展示或编辑。以下&#xff0c;我们将详细介绍一个pdf转成图片…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战系列教程前言总结

本系列教程的初衷 目前Github和技术社区中有不少功能强大&#xff0c;界面美观的Vue3ElementPlus通用后台管理系统&#xff0c;但这些系统对初学者都不太友好&#xff0c;导致大家学习路径比较陡峭。于是自己写了这个系列&#xff0c;手把手从头开发一个通用后台管理系统的雏形…

Unity 踩坑记录 用自定义类 创建的List不显示在 inspector面板

在 自定义类上面添加 【Serializable 】 扩展&#xff1a; 1&#xff1a;Serializable 序列化的是可序列化的类或结构。并且只能序列化非抽象非泛型的自定义的类 2&#xff1a;SerializeField是强制对私有字段序列化