文章目录

  • 题目描述
  • 解法 & 代码:
    • 思路

题目描述

  • 回文:正着念和倒着念一样。

解法 & 代码:

  • 一开始看到子串,想着可能no.3最长重复子串一样用滑动窗口。不过回文串的判断会很麻烦,于是舍弃。
  • 之后看题解,用的是动态规划。

思路

  • 从短串,到长串循环,最终得到一个dp[][]二维矩阵,dp[i][j]代表S(i,j)是否是回文串。
  • 单个元素的情况,必然是回文串。dp[i][i]。
  • 两个元素的情况,根据S[i] == S[i+1]即可判断。
  • 多个元素的情况,根据dp[i+1][j-1]以及S[i] == S[j]即可判断。
  • 有了这三种情况,我们就有了状态转移方程。
  • 对于循环,可以看成是对于每一个子串长度,都从每一个左边界 i开始构成串:因此j > i的情况全算是false
class Solution {public String longestPalindrome(String s) {// 用dp(Dynamic Programming)int len = s.length();// 空间复杂度O(n*n)boolean[][] dp = new boolean[len][len];String ans = "";// 字串长度nowLenfor (int nowLen = 0; nowLen < len; nowLen++) {// 字串左边界ifor (int i = 0; i + nowLen < len; i++) {// 字串右边界int j = i + nowLen;// 子串单个元素的情况if (nowLen == 0) {dp[i][j] = true;}// 子串两个元素的情况else if (nowLen == 1) {dp[i][j] = (s.charAt(i) == s.charAt(j));}// 多个元素的情况:用之前的结果构造当前结果else {dp[i][j] = dp[i + 1][j - 1] && (s.charAt(i) == s.charAt(j));}if (ans.length() < j - i + 1 && dp[i][j]) {ans = s.substring(i, j + 1);}}}return ans;}
}
  • 时间复杂度:O(n2n^2n2):因为动态规划的状态总数为n2n^2n2,对于每一个状态进行转移的时间为O(1)
  • 空间复杂度:O(n2n^2n2):也就是dp[n][n],存储动态规划状态需要的空间。

【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)相关推荐

  1. java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...

  2. LeetCode 5. 最长回文子串(动态规划)

    文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...

  3. leetcode算法题--最长回文子串

    题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 相关题目:最长回文子序列 动态规划 dp[i][j]表示从i到 ...

  4. 【LeetCode】5.最长回文子串

    5.最长回文子串 一.问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 二.问题简化 所谓回文字符串,即反过来念的字符串和正着念一样.比如"卿卿我我卿卿"."一 ...

  5. 【LeetCode系列】最长回文子串(双指针中心扩散)与可怜的小猪(老鼠毒药问题)

    ⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解,分别为[最长回文子串]和[可怜的小猪],展示语言java.

  6. 最长回文子串Java

    求解最长回文子串的几种方法(Java版) LeetCode 5 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab ...

  7. leetcode5. 最长回文子串(动态规划)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  8. [Leedcode][JAVA][第5题][最长回文子串][数组][动态规划]

    [问题描述][第5题][最长回文子串][中等] 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1:输入: "babad" 输出: & ...

  9. 刻意练习:LeetCode实战 -- Task17. 最长回文子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  10. LeetCode实战:最长回文子串

    题目英文 Given a string s, find the longest palindromic substring in s. You may assume that the maximum ...

最新文章

  1. 渐进式web应用程序_渐进式Web应用程序简介
  2. webpack4.0让编译速度飙升
  3. 学习java的一些笔记(6)
  4. 科幻片天际SKYLINE,喜欢科幻的朋友不要错过。
  5. 更改Firefox为中文界面(Ubuntu系统)
  6. 怎么用javascript进行拖拽(转摘)
  7. primefaces教程_PrimeFaces教程
  8. 四叶草引导linux教程,百科全书之黑苹果四叶草引导配置 boot讲解
  9. 动态lacp和静态lacp区别_3分钟弄懂LACP实现原理!
  10. php libxml安装,关于linux 安装libxml2
  11. 电子秤PCBA方案的功能及设计
  12. Unity之物理引擎
  13. 数字信号处理 史林 课本答案---第三章
  14. iredmail mysql 配置_Iredmail各大组件连接Mysql配置说明
  15. 苹果审核团队_如何才能跟 App Store 审核团队有效沟通?
  16. Bridging the Gap between Training and Inference for Neural Machine Translation翻译
  17. 1231231312
  18. js 字符串截取 slice 的小bug 以及处理方式
  19. PHP_MVC框架开发,nosql学习,mysql优化,以及高并发web架构处理
  20. 【架构治理】在代码存储库中记录软件架构

热门文章

  1. 雷赛运动控制卡能不能用c语言_基于PMAC控制卡的三坐标测量机控制系统
  2. 400错误是什么原因_499错误是什么?499错误的原因及解决方法
  3. java中for的常规用法_Java for循环的几种用法详解
  4. 防止Linux库so中的接口冲突
  5. php7 字符串,php7 参数、整形及字符串处理机制修改实例分析
  6. 四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序
  7. 用python分析小说_用Python对哈利波特系列小说进行情感分析
  8. Python存储生成的决策树——pickle模块
  9. (Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)
  10. React Native官方DEMO