【LeetCode笔记】5.最长回文子串(Java、动态规划、字符串)
文章目录
- 题目描述
- 解法 & 代码:
- 思路
题目描述
- 回文:正着念和倒着念一样。
解法 & 代码:
- 一开始看到子串,想着可能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、动态规划、字符串)相关推荐
- java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...
- LeetCode 5. 最长回文子串(动态规划)
文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...
- leetcode算法题--最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 相关题目:最长回文子序列 动态规划 dp[i][j]表示从i到 ...
- 【LeetCode】5.最长回文子串
5.最长回文子串 一.问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 二.问题简化 所谓回文字符串,即反过来念的字符串和正着念一样.比如"卿卿我我卿卿"."一 ...
- 【LeetCode系列】最长回文子串(双指针中心扩散)与可怜的小猪(老鼠毒药问题)
⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解,分别为[最长回文子串]和[可怜的小猪],展示语言java.
- 最长回文子串Java
求解最长回文子串的几种方法(Java版) LeetCode 5 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab ...
- leetcode5. 最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- [Leedcode][JAVA][第5题][最长回文子串][数组][动态规划]
[问题描述][第5题][最长回文子串][中等] 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1:输入: "babad" 输出: & ...
- 刻意练习:LeetCode实战 -- Task17. 最长回文子串
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- LeetCode实战:最长回文子串
题目英文 Given a string s, find the longest palindromic substring in s. You may assume that the maximum ...
最新文章
- 在不同制作基础上该如何选择网页制作软件?
- 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )
- python爬虫之urllib,伪装,超时设置,异常处理
- JetBrains下载历史版本
- python之语音识别(speech模块)
- 基于速度学习机的局部感受野
- appinfo信息管理系统_基于SSM框架的APP应用管理平台源码
- 微信小程序简单论坛实现demo,供参考。
- HTML颜色表及html代码(前端必备)
- Windows查看开关机记录
- 帝国cms ajax,帝国CMS注册体验加强 ajax检测用户名和密码
- SIPP测试使用指导
- 做事的常识 书籍梗概 小仓广
- Android:音乐播放器(3)—从播放列表到播放歌曲
- IDEA安装及配置jdk
- 图像预训练模型的起源解说和使用示例
- 用photoshop制作电子版签名图片
- [知了开发]“知了”APP整体设计
- 什么性格的人适合做好的程序员?
- Photoshop安装错误:无法写入注册表值。请检查权限。解决的办法居然是居然是居然是卸载到2345看图王
热门文章
- linux java输出到文件,linux java输出到文件内容
- docker port如何增加端口_docker部署redis实战
- python程序打包时出现lib not found_pyinstaller打包py脚本Warning:lib not found等相关问题...
- bs 程序用户个性化设置保存_想更改win10设置,这12种打开方法你不可不知,方便又快捷...
- python的matplotlib生成colorbar
- 1.MySQL数据库的介绍
- TCP/IP校验和(浅析+实例)
- Replace Error Code with Exception(以异常取代错误码)
- accept标头 php,如何在PHP中读取任何请求标头
- java单例方法_Java单例模式