当前位置: 首页 > article >正文

力扣5.最长回文子串

题目描述

在这里插入图片描述

思路

1.能够反复利用已判断好的回文子串

2.当子串s[i+1,j-1]是回文子串时,只要s[i]==s[j],那么s[i,j]也会是回文子串

3.用好动态规划,具体解释在代码注释里

代码

class Solution {
    public String longestPalindrome(String s) {
        int len = s.length();
        //如果是单字符,必定是回文,直接返回s
        if(len < 2) return s;
        //dp[][]表示s[i,...,j]是否是回文
        boolean[][] dp = new boolean[len][len];
        //最长回文子串长度初始化为1
        int maxLen = 1;
        //最长回文子串左边界初始化为0
        int begin = 0;
        char[] ch = s.toCharArray();
        //先进行初始化,所有单个字符都是回文
        for(int i = 0;i < len;i++){
            dp[i][i] = true;
        }
        //j是右边界
        for(int j = 1;j < len;j++){
            //i是左边界
            for(int i = 0;i < len;i++){
                //如果左边界大于右边界,就退出循环
                if(i > j){
                    break;
                }
                if(ch[i] != ch[j]){
                    dp[i][j] = false;
                }else{
                    //假如子串两边都相等,中间只有一个字母,直接返回状态true
                    if(j - i < 3){
                        dp[i][j] = true;
                    }else{
                        //不然当前状态就由上一个子串决定,是由内向外的,假如s[2,3]是回文,s[1]==s[4],
                        //那么s[1,4]也是回文;反之如果s[2,3]不是回文,那s[1,4]也不会是回文
                        dp[i][j] = dp[i+1][j-1];
                    }
                }
                //当dp[i][j]为true且回文子串长度大于最长长度,就更新最长回文子串长度
                if(dp[i][j] && j - i + 1 > maxLen){
                    maxLen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substring(begin,begin + maxLen);
    }
}

http://www.kler.cn/news/155271.html

相关文章:

  • 变分和导数有什么关系
  • 智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Linux 命令stat
  • Spring学习笔记:Day2
  • docker容器中创建非root用户
  • PMP-01
  • Docker安装Elasticsearch以及ik分词器
  • 8-1运用指针比较三个数的大小
  • 深入理解Servlet(下)
  • 【车载开发系列】FlashMemory基本概念
  • 使用Redis和opcache为网站加速教程
  • Filament引擎分析--command抽象设备API
  • 深入理解网络非阻塞 I/O:NIO
  • zabbix_sender——向zabbix交互的sdk
  • Pandas在Excel同一个sheet里插入多个Dataframe和行
  • Leetcode.330 按要求补齐数组
  • ★543. 二叉树的直径
  • 架构图是什么,怎么做?
  • 第六十四周周报
  • c语言-结构体
  • 慢 SQL 分析及优化
  • 项目开发维护技术文档(梳理总结中)
  • Docker + Jenkins + Nginx实现前端自动化部署
  • 大型语言模型在实体关系提取中的应用探索
  • Unity中Shader需要用到的C#脚本学习路线(个人自学路线)
  • 大小堆的实现(C语言)
  • 第九节HarmonyOS 常用基础组件2-Image
  • 基于eBPF检测非法调试行为
  • 软件工程期末复习(1)
  • 基于搜索协议实现工业设备升级