LeetCode Longest Palindromic Substring
原题链接在这里: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相关推荐
- [LeetCode] Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- [LeetCode]Longest Palindromic Substring题解(动态规划)
Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...
- LeetCode:Longest Palindromic Substring 最长回文子串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- leetcode Longest Palindromic Substring
中心拓展法 /** findLongestPalindrome.cpp** Created on: 2014年12月26日* Author: judyge*/#include <iostream ...
- 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)} ...
- [LeetCode]--5. Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring
LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...
- LeetCode 5. Longest Palindromic Substring 最长回文子串 Python 四种解法(Manacher 动态规划)
Longest Palindromic Substring 最长回文子串 学习笔记 1. Brute method 第一种方法:直接循环求解,o(n2)o(n^2) class Solution:de ...
- 【LeetCode】No.5. Longest Palindromic Substring -- Java Version
题目链接: https://leetcode.com/problems/longest-palindromic-substring/ 1. 题目介绍(最长回文子串) Given a string s, ...
最新文章
- mysql删除本机用户_mysql 不小心把root用户删除了,重建本地用户及远程用户
- PL/SQL 使用文档——表注释、显示乱码
- Android AsyncTask源码解读
- 为什么matlab用不成了,matlab2008 安装了不能用为什么?
- Sicily/1729. Steganography
- Sublime Text 3 Plugin Better!
- Audiority Big Goat Mac(模拟建模复古失真插件)
- 与次爱的人相濡以沫,与最爱的人相忘于江湖
- css3-文字添加边框
- 世界杯要来了,先跟梅西来个热身吧_数字体验_新浪博客
- 伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布、连续分布(正态分布)、大数定理、中心极限定理、贝叶斯理论
- java workflow 教程_Java工作流引擎jflow对流程的结束大总结
- 百度地图 自定义结果面板+分页+图层标注(标注点+搜索)
- 剑侠世界职业优缺点简介
- 77道Spring面试题以及参考答案(2021年最新版),java开发项目经理面试题
- jstree的简单使用例子
- h5获取浏览器的相机和摄像头权限
- c/c++进阶之爱恨交织的临时对象: 二、天使与魔鬼
- java黑皮书25.18-19----(压缩与解压),带界面,概念版
- eXtremeComponents参考文档
热门文章
- 我的年龄又快被5整除了......
- 听说你,对薪酬待遇不太满意。。。
- Java Web 开发必须掌握的三个技术:Token、Cookie、Session
- 深入探索并发编程之内存屏障:资源控制操作
- 中南大学计算机085403,What?这些个专业改考数一英一了!
- jmeter 自定义参数_jmeter参数化并在jenkins上执行
- 汤加近海处电缆或已断裂 修复需两周以上!淡水成最紧俏资源!
- 深圳出台数据中心PUE新政,或将开启千亿级节能市场
- @所有粉丝,祝大家新春快乐!
- 人才短缺是数据中心运营商面临的新问题