lintcode :Longest Palindromic Substring 最长回文子串
题目
给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。
给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"。
O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好。
解题
遍历字符串所有位置,对每个位置左右对等的找回文串,主要要分为两种形式
1.bab形式
2.bb形式
对找到的回文串保留最长的那个就是答案
public class Solution {
/**
* @param s input string
* @return the longest palindromic substring
*/
public String longestPalindrome(String s) {
// Write your code here
if( s == null || s.length() == 1)
return s;
String res = "";
int longest = Integer.MIN_VALUE;
for(int i = 1;i<s.length(); i++){
String str1 = longPalindrome(s,i,i);
String str2 = longPalindrome(s,i-1,i);
str1 = str2.length() >= str1.length()? str2:str1;
if(str1.length()>=longest){
res = str1;
longest = str1.length();
}
}
return res;
}
public String longPalindrome(String s,int start,int end){
int tmp1 = start;
int tmp2 = end;
while( start <= end && end<s.length() && start>=0 && s.charAt(start) == s.charAt(end) ){
start--;
end++;
}
// 没有进行while循环 说明不是回文串,这里只返回第start个字符
if(start ==tmp1 && end == tmp2)
return s.substring(start,start+1);
// start 多减了1
return s.substring(start + 1,end);
}
}
Java Code
总耗时: 19565 ms
class Solution:
# @param {string} s input string
# @return {string} the longest palindromic substring
def longestPalindrome(self, s):
# Write your code here
res = ""
longest = -1
if s == None or len(s) == 1:
return s
for i in range(1,len(s)):
res1 = self.longPalindrome(s,i,i)
res2 = self.longPalindrome(s,i-1,i)
if len(res1)> len(res2) and len(res1)>longest:
res = res1
longest = len(res1)
elif len(res2)> len(res1) and len(res2) >longest:
res = res2
longest = len(res2)
return res
def longPalindrome(self,s,start,end):
tmp1 = start
tmp2 = end
while start>=0 and end<len(s) and s[start] == s[end]:
start-=1
end +=1
if tmp1==start and tmp2 == end:
return s[start]
return s[(start+1):end]
Python Code
总耗时: 865 ms
动态规划
参考链接
定义二维数组table ,当table[i][j] =1 时候表示字符串str中i--j部分是回文串
table[i+1][j-1] == 1 && s.charAt(i) == s.charAt(j)
=>
table[i][j] == 1
初始化:table[i][i] = 1
public class Solution {
/**
* @param s input string
* @return the longest palindromic substring
*/
public String longestPalindrome(String s) {
// Write your code here
if( s == null || s.length() == 1)
return s;
String res = "";
int longest = Integer.MIN_VALUE;
int n = s.length();
int[][] table = new int[n][n];
for(int i=0;i<n;i++){
table[i][i] = 1;
}
for(int l=0;l<n;l++){
for(int i=0;i<n-l;i++){
int j = i+ l;
if( (j-i<=2 || table[i+1][j-1] == 1) && s.charAt(i)==s.charAt(j)){
table[i][j] =1;
if(j-i+1 > longest){
longest = j - i + 1;
res = s.substring(i,j+1);
}
}
}
}
return res;
}
}
j-i<=2 不明白
lintcode :Longest Palindromic Substring 最长回文子串的更多相关文章
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- LeetCode:Longest Palindromic Substring 最长回文子串
题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- [leetcode]5. Longest Palindromic Substring最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 【LeetCode】5. Longest Palindromic Substring 最长回文子串
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:最长回文子串,题解,leetcode, 力扣,python ...
- 1. Longest Palindromic Substring ( 最长回文子串 )
要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...
- 【翻译】Longest Palindromic Substring 最长回文子串
原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...
- LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法
题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...
随机推荐
- 自制小工具监控wcf服务是否正常
由于项目中有2个使用netTcpBinding的wcf服务经常出现无法提供服务的问题,一直找原因也找不到导致影响严重,更换InstanceContextMode和ConcurrencyMode配置也不 ...
- Cookie与Session详解
来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议 ...
- 一路走过的2013,welcome to 2014
驻入博客园,还是在大学时,至今没写过一篇博客,一直都是在看人家写的博客.2014 年第一天,就从这一天,开启博客之旅,与大家分享好书,分享技术,结交好朋友. 简单,介绍下自己,大三实习,因为热衷于互联 ...
- 深入理解JavaScript的变量作用域(转载Rain Man之作)
在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...
- openerp经典收藏 对象的预定义方法(转载)
对象的预定义方法 原文:http://shine-it.net/index.php/topic,2159.15.html 每个OpenERP的对象都有一些预定义方法,这些方法定义在基类osv.osv中 ...
- cadence16.6 如何对齐元件
1.选中Setup-->Application Mode-->Placement Edit mode2.按"CTRL"键,选中需要对齐的所有对象.3.点击右键右,或者在 ...
- Java中resourceBundle和Properties的区别
第一种办法InputStream is = Test.class.getResourceAsStream("DbConfig.properties");Properties p = ...
- linux文件目录下各文件简介
/bin:存放最常用命令: /boot:启动Linux的核心文件: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一般 ...
- 将日志搬家到自己的站点 http://nowhereman.cn/
个人站点同步地址 : http://nowhereman.cn/
- 常用的机器学习&数据挖掘知识点【转】
转自: [基础]常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Le ...