【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 ...
最新文章
- 渐进式web应用程序_渐进式Web应用程序简介
- webpack4.0让编译速度飙升
- 学习java的一些笔记(6)
- 科幻片天际SKYLINE,喜欢科幻的朋友不要错过。
- 更改Firefox为中文界面(Ubuntu系统)
- 怎么用javascript进行拖拽(转摘)
- primefaces教程_PrimeFaces教程
- 四叶草引导linux教程,百科全书之黑苹果四叶草引导配置 boot讲解
- 动态lacp和静态lacp区别_3分钟弄懂LACP实现原理!
- php libxml安装,关于linux 安装libxml2
- 电子秤PCBA方案的功能及设计
- Unity之物理引擎
- 数字信号处理 史林 课本答案---第三章
- iredmail mysql 配置_Iredmail各大组件连接Mysql配置说明
- 苹果审核团队_如何才能跟 App Store 审核团队有效沟通?
- Bridging the Gap between Training and Inference for Neural Machine Translation翻译
- 1231231312
- js 字符串截取 slice 的小bug 以及处理方式
- PHP_MVC框架开发,nosql学习,mysql优化,以及高并发web架构处理
- 【架构治理】在代码存储库中记录软件架构
热门文章
- 雷赛运动控制卡能不能用c语言_基于PMAC控制卡的三坐标测量机控制系统
- 400错误是什么原因_499错误是什么?499错误的原因及解决方法
- java中for的常规用法_Java for循环的几种用法详解
- 防止Linux库so中的接口冲突
- php7 字符串,php7 参数、整形及字符串处理机制修改实例分析
- 四位数码管秒表 c语言编程,4位共阴极数码管秒表设计仿真与程序
- 用python分析小说_用Python对哈利波特系列小说进行情感分析
- Python存储生成的决策树——pickle模块
- (Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)
- React Native官方DEMO