5. Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

 

Example:

Input: "cbbd"

Output: "bb"

本题开始的时候并不知道用什么办法来做,看了discussion才知道的,思路是,遍历数组元素的每一个元素值,对于每一个元素值分别以该元素和该元素及后面(palindrome为奇数和偶数)的元素作为
中心点,然后扩展记录maxlen和起始位置的index,最后返回substring就可以了。这道题和其他的palindrome不同之处在于,别的题都是从两遍往中间去判断,而这道题是从中间往两边去判断,代码如下:
 1 public class Solution {
 2     int lo,maxlen;
 3     public String longestPalindrome(String s) {
 4         if(s.length()<2) return s;
 5         for(int i=0;i<s.length();i++){
 6             extendPalindrome(s,i,i);
 7             extendPalindrome(s,i,i+1);
 8         }
 9         return s.substring(lo,lo+maxlen);
10     }
11     public void extendPalindrome(String s,int l,int r){
12         while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
13             l--;
14             r++;
15         }
16         if(maxlen<r-l-1){
17             maxlen = r-l-1;
18             lo = l+1;
19         }
20     }
21 }

 

posted @ 2017-02-11 06:44  CodesKiller  阅读(124)  评论(0编辑  收藏  举报