1.题目描述:

2.解题思路:

  题意:求一个字符串的最长回文子串。

  方法一:中心扩展法。遍历字符串的每一个字符,如果存在回文子串,那么中心是某一个字符(奇数)或两个字符的空隙(偶数),然后分两种情况(奇数或偶数)向两边扩展。本文主要介绍这种方法。

  因为回文字符串是以中心轴对称的,所以如果我们从下标 i 出发,用2个指针向 i 的两边扩展判断是否相等,那么只需要对0到len-1的下标都做此操作,就可以求出最长的回文子串。但需要注意的是,回文字符串有奇偶对称之分,即"abcba"与"abba"2种类型,因此需要在代码编写时都做判断。
     设函数void extendPalindrome(String s, int j, int k)是求由下标 j和 k 向两边扩展的回文串的最大长度,那么对0至ken-1的下标,调用2次此函数,即可求得以i 下标为奇回文和偶回文的最大子串长度。

该方法时间复杂度为O(n^2),空间复杂度O(1)。

  方法二:动态规划法。暂不介绍,详情见http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/

3.Java代码:

 //public class LeetCode 为测试代码
public class LeetCode {
public static void main(String[] args) {
String s="babad";
System.out.println(s+"的最长回文子串是:"+new Solution().longestPalindrome(s));
}
} //class Solution为ac代码
class Solution {
private static int low;//回文子串的起始位置
private static int maxLen;//回文子串的最大长度
public String longestPalindrome(String s) {
int len=s.length();
if(len<2) return s;
for(int i=0;i<len;i++){
extendPalindrome(s,i,i);//回文子串是奇数的情况
extendPalindrome(s,i,i+1);//回文子串是偶数的情况
}
return s.substring(low, low+maxLen);
}
private static void extendPalindrome(String s, int j, int k) {
while(j>=0&&k<s.length()&&s.charAt(j)==s.charAt(k)){
j--;
k++;
}
if(maxLen<k-j-1){
low=j+1;
maxLen=k-j-1;
} }
}

测试结果:

【LeetCode5】Longest Palindromic Substring★★的更多相关文章

  1. 【LeetCode】Longest Palindromic Substring 解题报告

    DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...

  2. 【leedcode】 Longest Palindromic Substring

    Given a , and there exists one unique longest palindromic substring. https://leetcode.com/problems/l ...

  3. 【leetcode】Longest Palindromic Substring (middle) 经典

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

  4. 【翻译】Longest Palindromic Substring 最长回文子串

    原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...

  5. Leetcode:【DP】Longest Palindromic Substring 解题报告

    Longest Palindromic Substring -- HARD 级别 Question SolutionGiven a string S, find the longest palindr ...

  6. 【Leetcode】Longest Palindromic Substring

    问题:https://leetcode.com/problems/longest-palindromic-substring/ 给定一个字符串 S,求出 S 的最长回文子串 思路: 1. 回文:一个字 ...

  7. 【SPOJ】Longest Common Substring II (后缀自动机)

    [SPOJ]Longest Common Substring II (后缀自动机) 题面 Vjudge 题意:求若干个串的最长公共子串 题解 对于某一个串构建\(SAM\) 每个串依次进行匹配 同时记 ...

  8. 【SPOJ】Longest Common Substring(后缀自动机)

    [SPOJ]Longest Common Substring(后缀自动机) 题面 Vjudge 题意:求两个串的最长公共子串 题解 \(SA\)的做法很简单 不再赘述 对于一个串构建\(SAM\) 另 ...

  9. 【SPOJ】Longest Common Substring II

    [SPOJ]Longest Common Substring II 多个字符串求最长公共子串 还是将一个子串建SAM,其他字符串全部跑一边,记录每个点的最大贡献 由于是所有串,要对每个点每个字符串跑完 ...

随机推荐

  1. dubbo 图片服务器(FastDFS) redis solr ActiveMQ等简单配置使用

    一.dubbo 项目基于soa的架构,表现层和服务层是不同的工程.所以要实现商品列表查询需要两个系统之间进行通信. 1.1如何实现远程通信? 1.Webservice:效率不高基于soap协议.项目中 ...

  2. Salesforce中如何删除调试日志

    大家在新建一个用户跟踪标记的时候可能会遇到以下报错:调试日志已经超过了上限,在编辑跟踪标志前,删除一些调试日志.但是在点击“全部删除”按钮删除所有可见的日志后,还是报同样的错误,这时候,我们打开开发者 ...

  3. css字体更小 css比12px更小的方法

    <span style="margin-top: 0;-webkit-transform-origin-x: 0;-webkit-transform: scale(0.90);&quo ...

  4. Just write about

    创建一个学生对象,存储学生对象,学生对象的数据来源于键盘录入,最后遍历集合. 学生类,集合对象,键盘录入数据并将数据赋值给学生类的成员(可以写成一个方法),调用方法,遍历集合.

  5. centos7 下安装 nginx-1.12.2

    官网地址:http://nginx.org/2017.html 转载:https://blog.csdn.net/harris135/article/details/78576263 1.环境: ce ...

  6. linux操作系统不重启添加raid0步骤

    1.限制:本步骤仅适用于LSI芯片的raid卡,可以通过以下蓝色指令判断是否LSI芯片 [root@HKC-Lab-CDN ~]# lspci | grep -i lsi 03:00.0 RAID b ...

  7. springMvc之文件上传与下载

    我们经常会使用的一个功能是文件下载,既然有文件下载就会有文件上传,下面我们来看一下文件上传是如何实现的 首先准备好一个页面 <style type="text/css"> ...

  8. 运维利器万能的 strace

    strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进程状态变更等. ...

  9. WebBrowser实现:自动填充网页上的用户名和密码并点击登录按钮

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { ...

  10. 【转】Java学习---Java Web基础面试题整理

    [原文]https://www.toutiao.com/i6592359948632457731/ 1.什么是Servlet? 可以从两个方面去看Servlet: a.API:有一个接口servlet ...