LeetCode[5] 最长的回文子串
2016-03-20 20:50
447 查看
题目描述
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
即给定一个字符串,返回该字符串最长的回文子串
如给出“acabcddcbadike",返回“abcddcba"。
思路
回文子串分为长度为偶数(中间两个字符相同,就像示例)和长度为奇数两种。从头往后遍历s.length()趟,第i趟指针j,k从i(奇数)或j从i,k从i+1(偶数)向两边扩散(s.charAt(i)和s.charAt(j)相等才扩散),k-j-1为该回文子串长度,若比之前maxlen大,则更新maxlen。
代码如下
public class Solution { private int lo,maxlen;//子串的起始和长度 public String longestPalindrome(String s) { int len=s.length(); if (len<2) return s; for (int i=0;i<len-1;i++){//n躺遍历 extendPalindrome(s,i,i); //子串长度为奇数 extendPalindrome(s,i,i+1);//子串长度为偶数 } return s.substring(lo,lo + maxlen); } private 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){ lo=j+1; maxlen=k-j-1; } } }
相关文章推荐
- SAX,DOM,PULL三种解析方式
- MySQL编译安装环境介绍:
- Java继承与初始化
- 剑指offer-面试题8:旋转数组的最小数字
- SVN服务器搭建和使用(一)
- 代码规范
- SVN之版本控制系统
- 模板(双向链表与队列)
- Learning to Rank for IR的评价指标—MAP,NDCG,MRR
- C++模板类
- 似乎对于新平台要考虑程序的整体应用层弄个固定模式了
- Java并发编程:volatile关键字解析
- Ubuntu下安装配置Lighttpd+PHP+SQLite +cgi
- PHP数组的相关处理函数2
- 什么叫MVCC
- shutdown 关机指令
- QT使用总结
- 【C#进阶系列】13 接口
- Android获取存储路径API的说明
- ios 上传APP到APP STORE注意事项