定位:中等题
找到给定的字符串中的最长的回文子串,可以采取遍历每一个字符,判断有没有可能以其为中心生成回文字串,一旦可能就向两端扩展。有两种情况,一种是以一个字母为中心,另一种为以两个相同字母为中心,当扩展到极限后记录并判断是不是最长的。
Java实现如下:
1 public class Solution { 2 public String longestPalindrome(String s) { 3 int len=s.length(); 4 if(len<=1){ 5 return s; 6 } 7 int Len=1,maxLen=1; 8 int i,j; 9 String str=String.valueOf(s.charAt(0)); 10 if(s.charAt(0)==s.charAt(1)){ 11 str=s.substring(0,2); 12 maxLen=2; 13 } 14 for(i=1;i<len-1;i++){ 15 if(s.charAt(i-1)==s.charAt(i+1)){ 16 j=1; 17 while(i-j>=0&&i+j<len&&s.charAt(i-j)==s.charAt(i+j)){ 18 j++; 19 } 20 j--; 21 Len=2*j+1; 22 if(Len>maxLen){ 23 maxLen=Len; 24 str=s.substring(i-j,i+j+1); 25 } 26 } 27 if(s.charAt(i)==s.charAt(i+1)){ 28 j=1; 29 while(i-j+1>=0&&i+j<len&&s.charAt(i-j+1)==s.charAt(i+j)){ 30 j++; 31 } 32 j--; 33 Len=2*j; 34 if(Len>maxLen){ 35 maxLen=Len; 36 str=s.substring(i-j+1,i+j+1); 37 } 38 } 39 } 40 return str; 41 } 42 }