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 }