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

LeetCode hot100-93

https://leetcode.cn/problems/longest-palindromic-substring/description/?envType=study-plan-v2&envId=top-100-liked

5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
  1. 状态定义
    我们用一个二维数组 dp[i][j] 表示子串 s[i…j] 是否是回文:

dp[i][j] = true 表示子串 s[i…j] 是回文;
dp[i][j] = false 表示子串 s[i…j] 不是回文。
2. 状态转移方程
要判断子串 s[i…j] 是否是回文,需要满足以下两个条件:

两端字符相等:s[i] == s[j]
内部子串 s[i+1…j-1] 也是回文:dp[i+1][j-1] = true
因此状态转移方程为:
在这里插入图片描述

dp[i][j]=(s[i]==s[j]) && (j−i<2 ∣∣ dp[i+1][j−1])
如果子串长度为 1(j - i == 0),它本身是回文。
如果子串长度为 2(j - i == 1),只需判断 s[i] == s[j]。
如果子串长度大于 2(j - i > 1),还需要判断 dp[i+1][j-1] 是否为 true。

这题去遍历各种子串的循环有点意思。外层是字符串长度从1到n。内层是子串的起始位置。子串的结束位置j是i和len算出来的。

class Solution {
    public String longestPalindrome(String s) {
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        int maxLen = 1;
        int start = 0;
        for(int len = 1;len<=n;len++){
            for(int i=0;i<=n-len;i++){
                int j = i+len-1;
                if(s.charAt(i)==s.charAt(j)){
                    if(len<=2){
                        dp[i][j]=true;
                    } else{
                        dp[i][j]=dp[i+1][j-1];
                    }
                }
                if(dp[i][j] && len>maxLen){
                    maxLen = len;
                    start = i;
                }
            }
            
        }
        return s.substring(start,start+maxLen);

    }
}

http://www.kler.cn/a/448334.html

相关文章:

  • tomcat的安装以及配置(基于linuxOS)
  • iterm2 focus时灰色蒙层出现的解决办法
  • Oracle 数据库函数的用法(一)
  • 高效准确的PDF解析工具,赋能企业非结构化数据治理
  • 数智化医院分布式计算框架融合人工智能方向初步实现与能力转换浅析
  • 使用 Docker 打包和运行 Vue 应用
  • stm32 查找进硬件错误方法
  • 12.19问答解析
  • 常用网络协议简述
  • Java-web安全01
  • Python小游戏开发:实现带道具加成的经典打砖块游戏
  • 【JetPack】WorkManager笔记
  • Java 集合框架中的 List、ArrayList 和 泛型 实例
  • 数据库的范式
  • 学技术学英文:java CyclicBarrier 和 CountDownLatch用法区别,举例生动看完不会忘
  • Unity中通过代码设置材质HDR颜色的方法参考
  • opencv 项目--图像匹配
  • (13)CT137A- 简易音乐盒设计
  • sentinel学习笔记4-SPI 在 Sentinel 中的应用
  • 本地电脑生成SSH公钥私钥对,用于SSH远程连接服务器
  • 【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
  • 泛型(2)
  • 开源!自制一个桌面宠物(STM32CUBEMX HAL库 PWM波 小项目)
  • 在 CUDA C/C++ 中使用共享內存
  • 路径规划之启发式算法之二十一:禁忌搜索算法(Tabu Search,TS)
  • Linux 端口操作