leetcode刷题之旅(5) Longest Palindromic Substring
题目描述
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
样例
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
思路分析
1.回文字符串的子串也是回文,比如P[i][j](比如以i开头以j结束的子串)是回文字符串,那么P[i+1][j-1]也是回文字符串,这样回文字符串就能分解成一系列子问题了。
2.这样空间复杂度O(N^2),时间复杂度O(N^2)。
3.P[i][j]=0 表示子串i~j不是回文串,P[i][j]=1 表示子串i~j是回文串。
代码
精简版
public String longestPalindrome(String s) {int n = s.length();String res = null;boolean[][] dp = new boolean[n][n];for (int i = n - 1; i >= 0; i--) {for (int j = i; j < n; j++) {dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 3 || dp[i + 1][j - 1]);if (dp[i][j] && (res == null || j - i + 1 > res.length())) {res = s.substring(i, j + 1);}}}return res;
}
注释版
public class LongestPalindromicSubstring
{public static String LongestPalindrome(String s){if (s == null || s.length() == 1){return s;}int len = s.length();boolean[][] flags = new boolean[1000][1000]; //flags[i][j]=true表示字串i~j位回文字符串int start = 0;int maxlen = 0;for (int i=0; i<len; i++) {flags [i][i] = true;if (i<len-1 && s.charAt(i)==s.charAt(i+1)) //考虑相邻字符相同的情况{flags[i][i+1] = true;start = i;maxlen = 2;}}for (int m = 3; m < len; m++) //i代表字符串长度,从3开始{for (int i = 0; i <=len-m; i++) {int j = i+m-1; //依次检查是否符合回文串条件if (flags[i+1][j-1] && s.charAt(i)==s.charAt(j)){flags[i][j] = true;start = i;maxlen = m;}}}if (maxlen >= 2){return s.substring(start, start+maxlen);}return null;}}
leetcode刷题之旅(5) Longest Palindromic Substring相关推荐
- LeetCode刷题之旅
LeetCode刷题之旅 一.链表 1.链表逆序(leetcode 206.Reverse Linked List)esay 题目描述:已知链表头节点指针head,将链表逆序. 思路:从链表的头节点依 ...
- Leetcode刷题之旅1
Leetcode刷题之旅1 先从剑指offer66题开始刷 链表可创建dummy哑节点指向头指针,目的是为了对头节点进行操作 例子:删除链表中重复节点 确定有限状态自动机 例子:剑指offer20 表 ...
- LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...
- LeetCode刷题之旅正式开始
开学三个多月了,但没写过多少代码,感觉再这样下去就废了.所以今天开始LeetCode刷题.这篇文章算是一个刷题的开端,主要写写为什么选择leetcode刷题,怎样刷题等问题. 1.为什么刷题? 我觉得 ...
- leetcode刷题之旅-58. 最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度.如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词,请返回 0 . 说明:一个单词 ...
- leetcode 第五题 Longest Palindromic Substring (java)
Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may ...
- 你面试稳了!通关LeetCode刷题完整攻略,省时又高效
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:穷码农 来源:https://zhuanlan.zhihu.com/p/10 ...
- Leetcode刷题指南和top100题目
原文链接:https://blog.csdn.net/qq_39521554/article/details/79160815 参考博文:https://blog.csdn.net/mmc2015/a ...
- leetcode刷题规划
LeetCode精华题目列表[刷题规划系列] – TuringPlanet 目录 算法题到底在考察什么? 题目列表 Array String Linked List Queue Stack Advan ...
最新文章
- go 变量在其中一个函数中赋值 另一个函数_go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包...
- android内核模块签名,android安装内核module,提示Required key not available
- Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can
- 信息学奥赛一本通——1001:Hello,World!
- PetShop 4.0 官方详解
- 2019-02-26-GCN资料
- Oracle 存储过程、存储函数 与原生 JDBC 调用
- python兔子编程_少儿编程分享:手把手教你用Python编写兔獾大作战(完)
- hashmap java 排序_Java 对HashMap进行排序的三种常见方法
- c51单片机蜂鸣器汇编语言,51单片机控制蜂鸣器播放5首歌曲汇编程序
- 闲谈IPv6-从ICMP的视角形而上地分析IPv6
- 【家具CRM客户关系管理系统案例】数夫助力左右家私CRM客户关系管理系统正式上线
- ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- 洛谷P1357 花园(状态压缩+矩阵快速幂)
- Mock进行单元测试
- 实践中如何优化MySQL
- CANoe从入门到精通“保姆级”教程(三)- 经典范例解读
- 现在哪个安卓模拟器比较好用--BlueStacks 5
- word文档纯字数统计_如何在您的Word文档中插入字数统计
- 如何成为虾皮的优选卖家-扬帆际海
热门文章
- 用Java抓取10年大乐透中奖数据
- 萌新必看—10种前端存储哪家强,一文读尽!
- SAP PCA利润中心会计案例教程后台配置
- 如何美观的把SPSS统计结果复制粘贴到Word文档中?
- qq满屏飞吻代码_[爱情][飞吻][跳跳][爱心][嘴唇][玫瑰][月亮][礼物][拥抱]什么意思...
- 青春三部曲(《且听风吟》,《一九七三年的弹子球》,《寻羊冒险记》)--[日]村上春树...
- C语言程序设计-p163例7-9
- 计算机考研自我介绍大概多少字,1分钟自我介绍多少字
- 好心情:长期心情不好就是抑郁症?
- RHEL7.6安装MySQL5.6.30