原题链接在这里:https://leetcode.com/problems/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:

Input: "babad"Output: "bab"Note: "aba" is also a valid answer. 

Example:

Input: "cbbd"Output: "bb"

题解:

以字符串的每一个char 为中心开始向左右延展,直到不是回文为止,若新的substring 比原来的res长,就更新res.

Note: 子字符串的中心可以是一个字符,整个字符串有奇数个字符;也可以是两个字符中间的空隙,整个字符串有偶数个字符。

Note: longest辅助函数在左右延展时,跳出while loop时,i 和 j 指向的要么是out of index bound, 要么指向的字符已经不想等了。所以最后返回的最常字符串应该是substring(i+1,j)这一段, j 指向的 字符并没有包括在最后结果中。

Time Complexity: O(n^2). n = s.length(). Space: O(n), res的长度。

AC Java:

 1 public class Solution {
 2     public String longestPalindrome(String s) {
 3         if(s == null || s.length() == 0){
 4             return s;
 5         }
 6         String res = "";
 7         for(int i = 0; i<s.length(); i++){
 8             //string with odd # of characters
 9             String longestOddSubstring = findLongest(s, i, i);
10             if(longestOddSubstring.length() > res.length()){
11                 res = longestOddSubstring;
12             }
13             //string with even # of characters
14             String longestEvenSubstring = findLongest(s, i, i+1);
15             if(longestEvenSubstring.length() > res.length()){
16                 res = longestEvenSubstring;
17             }
18         }
19         return res;
20     }
21
22     //find the longest palindromic substring
23     private String findLongest(String s, int i, int j){
24         while(i>=0 && j<s.length() && s.charAt(i) == s.charAt(j)){
25             i--;
26             j++;
27         }
28         return s.substring(i+1,j);
29     }
30 }

可以用index取得结果来节省空间. 当前index 为i向两边延展后取得的最长palindrome substring的长度len.

最长palindrome substring的左侧index就是i-(len-1)/2, 右侧index就是i+len/2.

Time Complexity: O(n^2). n = s.length().

Space: O(1).

AC Java:

 1 class Solution {
 2     public String longestPalindrome(String s) {
 3         if(s == null || s.length() == 0){
 4             return s;
 5         }
 6
 7         int l = 0;
 8         int r = 0;
 9         for(int i = 0; i<s.length(); i++){
10             int longestOddSubstringLen = findLongest(s, i, i);
11             int longestEvenSubstringLen = findLongest(s, i, i+1);
12             int longestSubstringLen = Math.max(longestOddSubstringLen, longestEvenSubstringLen);
13             if(longestSubstringLen > r-l+1){
14                 l = i-(longestSubstringLen-1)/2;
15                 r = i+longestSubstringLen/2;
16             }
17         }
18         return s.substring(l, r+1);
19     }
20
21     private int findLongest(String s, int i, int j){
22         while(i>=0 && j<s.length() && s.charAt(i)==s.charAt(j)){
23             i--;
24             j++;
25         }
26         return j-i-1;
27     }
28 }

DP 方法. dp[i][j]记录s.substring(i, j+1)是否为Palindromic.

dp[i][j] = (s.charAt(i) == s.charAt(j) && (j-i<2 || dp[i+1][j-1]).

Time Complexity: O(n^2). Space: O(n^2).

 1 public class Solution {
 2     public String longestPalindrome(String s) {
 3         if(s == null || s.length() == 0){
 4             return s;
 5         }
 6
 7         String res = "";
 8         int len = s.length();
 9         boolean [][] dp = new boolean[len][len];
10         for(int i = len-1; i>=0; i--){
11             for(int j = i; j<len; j++){
12                 //Need to check j-i < 2 first
13                 //or IndexOutOfBondException
14                 if(s.charAt(i) == s.charAt(j) && (j-i<2 || dp[i+1][j-1])){
15                     dp[i][j] = true;
16                     if(j-i+1 > res.length()){
17                         res = s.substring(i, j+1);
18                     }
19                 }
20             }
21         }
22         return res;
23     }
24 }

类似Palindromic Substrings, Longest Palindromic Subsequence.

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4921988.html

LeetCode Longest Palindromic Substring相关推荐

  1. [LeetCode] Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  2. [LeetCode]Longest Palindromic Substring题解(动态规划)

    Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...

  3. LeetCode:Longest Palindromic Substring 最长回文子串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  4. leetcode Longest Palindromic Substring

    中心拓展法 /** findLongestPalindrome.cpp** Created on: 2014年12月26日* Author: judyge*/#include <iostream ...

  5. leetcode(5)—— Longest Palindromic Substring(最长回文子串)

    longest-palindromic-substring 法1:暴力搜索(但会超时) 遍历全部子串(n+(n−1)+-+1=n(1+n)2n+(n-1)+\ldots+1=\frac{n(1+n)} ...

  6. [LeetCode]--5. Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  7. 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring

    LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...

  8. LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)

    Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Solution:de ...

  9. 【LeetCode】No.5. Longest Palindromic Substring -- Java Version

    题目链接: https://leetcode.com/problems/longest-palindromic-substring/ 1. 题目介绍(最长回文子串) Given a string s, ...

最新文章

  1. mysql删除本机用户_mysql 不小心把root用户删除了,重建本地用户及远程用户
  2. PL/SQL 使用文档——表注释、显示乱码
  3. Android AsyncTask源码解读
  4. 为什么matlab用不成了,matlab2008 安装了不能用为什么?
  5. Sicily/1729. Steganography
  6. Sublime Text 3 Plugin Better!
  7. Audiority Big Goat Mac(模拟建模复古失真插件)
  8. 与次爱的人相濡以沫,与最爱的人相忘于江湖
  9. css3-文字添加边框
  10. 世界杯要来了,先跟梅西来个热身吧_数字体验_新浪博客
  11. 伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布、连续分布(正态分布)、大数定理、中心极限定理、贝叶斯理论
  12. java workflow 教程_Java工作流引擎jflow对流程的结束大总结
  13. 百度地图 自定义结果面板+分页+图层标注(标注点+搜索)
  14. 剑侠世界职业优缺点简介
  15. 77道Spring面试题以及参考答案(2021年最新版),java开发项目经理面试题
  16. jstree的简单使用例子
  17. h5获取浏览器的相机和摄像头权限
  18. c/c++进阶之爱恨交织的临时对象: 二、天使与魔鬼
  19. java黑皮书25.18-19----(压缩与解压),带界面,概念版
  20. eXtremeComponents参考文档

热门文章

  1. 我的年龄又快被5整除了......
  2. 听说你,对薪酬待遇不太满意。。。
  3. Java Web 开发必须掌握的三个技术:Token、Cookie、Session
  4. 深入探索并发编程之内存屏障:资源控制操作
  5. 中南大学计算机085403,What?这些个专业改考数一英一了!
  6. jmeter 自定义参数_jmeter参数化并在jenkins上执行
  7. 汤加近海处电缆或已断裂 修复需两周以上!淡水成最紧俏资源!
  8. 深圳出台数据中心PUE新政,或将开启千亿级节能市场
  9. @所有粉丝,祝大家新春快乐!
  10. 人才短缺是数据中心运营商面临的新问题