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/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...
随机推荐
- ThreadLocal学习记录
ThreadLocal简介 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的 ...
- 【WinForm】“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常,无法识别的配置节 system.serviceModel
出现问题的原因: 在本机上没有出现问题,让一个同事测试的时候,在另外一台电脑上出现连接数据库失败,系统不能打开的问题 在网上搜了一下,有说是数据库连接字符串错误的,有说app.config文件配置不匹 ...
- Android设置背景图像重复【整理自网络】
1:在res/drawable文件下新建一个xml文件tool_bar_bg_repeat.xml比如为: <?xml version="1.0" encoding=&quo ...
- mvvm结构中数据的关联----wpf
1.在视图中PlotView.xaml <Button Content="<<" Height="23" HorizontalAlignmen ...
- The difference between Union & Union All in SQL Server/pOSTGRESQL
Following is test in SQL Server: USE [TestDB] CREATE TABLE [dbo].[UserInfoTest02]( [number] [bigint] ...
- RaddioButton控件
<GroupBox Margin="5"> <StackPanel> <RadioButton IsChecked="true"& ...
- cppcheck使用
一.splint介绍 splint是一个动态检查C语言程序安全弱点和编写错误的程序.splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未 ...
- substr,mb_substr,iconv_substr,array_slice
通过一个例子来看其关系 /** +---------------------------------------------------------- * 字符串截取,支持中文和其他编码 +----- ...
- phpcms v9 企业黄页加入企业会员提示“请选择企业库类型!”
很多新进站长选择使用了PHPCMS v9内容管理系统,它强大的功能无疑吸引了很多人,尤其是企业黄页功能更是其中的佼佼者,但是官方发布的版本兼容性比较差,出现会员加入企业会员提示“请选择企业库类型!”, ...
- DB天气app冲刺二阶段第十天
昨天困到不行了 所以就写了那么几句..所以今天好好写写了要.. 今天的收获了一个很重要的问题 就还是api接口的事情,以前的那个接口虽然能用但是总是不稳定,今天由决定百度的一下然后就发现了一个很好用的 ...