原题链接在这里:https://leetcode.com/problems/longest-palindromic-substring/
对每一个子字符串的中心开始向左右延展,直到不是回文为止,同时更新最大长度。
子字符串的中心可以是一个字符,整个字符串有奇数个字符;也可以是两个字符中间的空隙,整个字符串有偶数个字符。
Note: longest辅助函数在左右延展时,跳出while loop时,i 和 j 指向的要么是out of index bound, 要么指向的字符已经不想等了。所以最后返回的最常字符串应该是substring(i+1,j)这一段,
j 指向的 字符并没有包括在最后结果中。
AC Java:
1 public class Solution { 2 public String longestPalindrome(String s) { 3 if(s == null || s.length() == 0){ 4 return s; 5 } 6 String res = s.substring(0,1); 7 for(int i = 0; i<s.length(); i++){ 8 //string with odd characters 9 String str = longest(s, i, i); 10 if(str.length() > res.length()){ 11 res = str; 12 } 13 //string with even characters 14 str = longest(s, i, i+1); 15 if(str.length() > res.length()){ 16 res = str; 17 } 18 } 19 return res; 20 } 21 22 private String longest(String s, int i, int j){ 23 while(i>=0 && j<s.length() && s.charAt(i) == s.charAt(j)){ 24 i--; 25 j++; 26 } 27 return s.substring(i+1,j); //error 28 } 29 }
LeetCode Longest Palindromic Substring
原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4921988.html