【LeetCode5】Longest Palindromic Substring★★
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★★的更多相关文章
- 【LeetCode】Longest Palindromic Substring 解题报告
DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...
- 【leedcode】 Longest Palindromic Substring
Given a , and there exists one unique longest palindromic substring. https://leetcode.com/problems/l ...
- 【leetcode】Longest Palindromic Substring (middle) 经典
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- 【翻译】Longest Palindromic Substring 最长回文子串
原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...
- Leetcode:【DP】Longest Palindromic Substring 解题报告
Longest Palindromic Substring -- HARD 级别 Question SolutionGiven a string S, find the longest palindr ...
- 【Leetcode】Longest Palindromic Substring
问题:https://leetcode.com/problems/longest-palindromic-substring/ 给定一个字符串 S,求出 S 的最长回文子串 思路: 1. 回文:一个字 ...
- 【SPOJ】Longest Common Substring II (后缀自动机)
[SPOJ]Longest Common Substring II (后缀自动机) 题面 Vjudge 题意:求若干个串的最长公共子串 题解 对于某一个串构建\(SAM\) 每个串依次进行匹配 同时记 ...
- 【SPOJ】Longest Common Substring(后缀自动机)
[SPOJ]Longest Common Substring(后缀自动机) 题面 Vjudge 题意:求两个串的最长公共子串 题解 \(SA\)的做法很简单 不再赘述 对于一个串构建\(SAM\) 另 ...
- 【SPOJ】Longest Common Substring II
[SPOJ]Longest Common Substring II 多个字符串求最长公共子串 还是将一个子串建SAM,其他字符串全部跑一边,记录每个点的最大贡献 由于是所有串,要对每个点每个字符串跑完 ...
随机推荐
- html 手机web超出屏幕宽度的内容不换行,并产生横向滚动条
html 手机web超出屏幕宽度的内容不换行,并产生横向滚动条 white-space: nowrap;overflow-x: scroll;
- IDEA项目搭建五——使用JRebel插件实现IDEA热部署
使用IDEA开发时修改了html或js或java代码都需要编译启动浪费了很多时间,所以可以借助热部署插件实现自动编码,每次修改完代码保存后就可以刷新页面看效果很方便,热部署工具有很多在此只推荐JReb ...
- Java 社区平台 - Sym 1.7.0 发布
English | 中文 简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享.交友.游戏的社交网络 集成了聚合独立 ...
- Android逆向 编写一个Android程序
本节使用的Android Studio版本是3.0.1 首先,我们先编写一个apk,后面用这个apk来进行逆向.用Android Studio创建一个新的Android项目,命名为Jhm,一路Next ...
- Node路由简单的处理
看过node很多例子,都是将路由直接放到入口文件中处理,使得文件显得很大很乱,特别是当一个项目变大,有上百甚至上千的路由,那该怎么办? 最近在想如何将一个个的路由放到一个单独的模块中处理,比如'/us ...
- Oracle 当数据库的表没有drop操作就可以通过如下方式恢复表数据
--执行下列语句可查询出相关时间点 select * from sys.smon_scn_time order by time_dp desc; --执行下列语句可将某个时间点的数据恢复 insert ...
- 在SQL Server中用好模糊查询指令LIKE (转载)
like在sql中的使用:在SQL Server中用好模糊查询指令LIKE:查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇 一.一 ...
- linux 通过 mac地址 查询 ip 和 清除arp 缓存
问题重述: 今天,突然找不到vm 的ip 了,但是可以从网卡状态上看到其 mac 地址,并且确定主机是启动状态,网络状态良好(后来发现因为子网掩码的问题,导致虚拟机和网关之间不通信,从而导致其他网络的 ...
- COM动态添加删除成员,类似JavaScript中调用的对象
在JavaScript中调用对象时,可动态添加删除成员如: var obj=new Object; obj.member1='aaaaa'; obj.fun1=function() { alert(' ...
- Windows10下python3.5的sklearn库安装
具体安装方法参考https://blog.csdn.net/HYDMonster/article/details/79766086 但是注意的是,http://www.lfd.uci.edu/~goh ...