题目描述

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相关推荐

  1. LeetCode刷题之旅

    LeetCode刷题之旅 一.链表 1.链表逆序(leetcode 206.Reverse Linked List)esay 题目描述:已知链表头节点指针head,将链表逆序. 思路:从链表的头节点依 ...

  2. Leetcode刷题之旅1

    Leetcode刷题之旅1 先从剑指offer66题开始刷 链表可创建dummy哑节点指向头指针,目的是为了对头节点进行操作 例子:删除链表中重复节点 确定有限状态自动机 例子:剑指offer20 表 ...

  3. LeetCode 刷题之旅(2020.05.22)——105. 从前序与中序遍历序列构造二叉树(中)

    LeetCode 刷题之旅(2020.05.22)--105. 从前序与中序遍历序列构造二叉树(中) 题目: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如, ...

  4. LeetCode刷题之旅正式开始

    开学三个多月了,但没写过多少代码,感觉再这样下去就废了.所以今天开始LeetCode刷题.这篇文章算是一个刷题的开端,主要写写为什么选择leetcode刷题,怎样刷题等问题. 1.为什么刷题? 我觉得 ...

  5. leetcode刷题之旅-58. 最后一个单词的长度

    给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度.如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词,请返回 0 . 说明:一个单词 ...

  6. leetcode 第五题 Longest Palindromic Substring (java)

    Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may ...

  7. 你面试稳了!通关LeetCode刷题完整攻略,省时又高效

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:穷码农 来源:https://zhuanlan.zhihu.com/p/10 ...

  8. Leetcode刷题指南和top100题目

    原文链接:https://blog.csdn.net/qq_39521554/article/details/79160815 参考博文:https://blog.csdn.net/mmc2015/a ...

  9. leetcode刷题规划

    LeetCode精华题目列表[刷题规划系列] – TuringPlanet 目录 算法题到底在考察什么? 题目列表 Array String Linked List Queue Stack Advan ...

最新文章

  1. go 变量在其中一个函数中赋值 另一个函数_go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包...
  2. android内核模块签名,android安装内核module,提示Required key not available
  3. Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can
  4. 信息学奥赛一本通——1001:Hello,World!
  5. PetShop 4.0 官方详解
  6. 2019-02-26-GCN资料
  7. Oracle 存储过程、存储函数 与原生 JDBC 调用
  8. python兔子编程_少儿编程分享:手把手教你用Python编写兔獾大作战(完)
  9. hashmap java 排序_Java 对HashMap进行排序的三种常见方法
  10. c51单片机蜂鸣器汇编语言,51单片机控制蜂鸣器播放5首歌曲汇编程序
  11. 闲谈IPv6-从ICMP的视角形而上地分析IPv6
  12. 【家具CRM客户关系管理系统案例】数夫助力左右家私CRM客户关系管理系统正式上线
  13. ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
  14. 洛谷P1357 花园(状态压缩+矩阵快速幂)
  15. Mock进行单元测试
  16. 实践中如何优化MySQL
  17. CANoe从入门到精通“保姆级”教程(三)- 经典范例解读
  18. 现在哪个安卓模拟器比较好用--BlueStacks 5
  19. word文档纯字数统计_如何在您的Word文档中插入字数统计
  20. 如何成为虾皮的优选卖家-扬帆际海

热门文章

  1. 用Java抓取10年大乐透中奖数据
  2. 萌新必看—10种前端存储哪家强,一文读尽!
  3. SAP PCA利润中心会计案例教程后台配置
  4. 如何美观的把SPSS统计结果复制粘贴到Word文档中?
  5. qq满屏飞吻代码_[爱情][飞吻][跳跳][爱心][嘴唇][玫瑰][月亮][礼物][拥抱]什么意思...
  6. 青春三部曲(《且听风吟》,《一九七三年的弹子球》,《寻羊冒险记》)--[日]村上春树...
  7. C语言程序设计-p163例7-9
  8. 计算机考研自我介绍大概多少字,1分钟自我介绍多少字
  9. 好心情:长期心情不好就是抑郁症?
  10. RHEL7.6安装MySQL5.6.30