Longest Palindromic Substring

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, and there exists one unique longest palindromic substring.

思路:

最开始想把所有子串都穷举出来,感觉不太靠谱。后面在纸上画了一下,想到一种方法

遍历整个字符串i

1.如果s.charAt(i) == s.charAt(i + 1),以i和i+1为中心向两边扩展,如果是回文且长度超过了已经求得最长回文result,更新result

2.如果s.charAt(i - 1) == s.charAt(i + 1),以i - 1和i + 1为中心向两边扩展,如果是回文且长度超过了已经求得的回文result,更新result

遍历结束返回result

 1 public class Solution {
 2     public String longestPalindrome(String s) {
 3         if(0 == s.length() || 1 == s.length())
 4             return s;
 5         else{
 6             String result = "";
 7             
 8             for(int i = 0; i < s.length(); i++){
 9                 if(i + 1 < s.length() && s.charAt(i) == s.charAt(i + 1)){                        //以i和i + 1为中心
10                     int j = i + 1;
11                     int k = i;
12 //                    i = i;
13                     while(k >= 0 && j < s.length()){                    //向中心两边扩展
14                         if(s.charAt(k) == s.charAt(j)){        
15                             if((j - k + 1) > result.length())        //只有更大才能更新
16                                 result = s.substring(k, j + 1);        //开始索引包括,结束索引不包括  更新最长回文
17                             k--;
18                             j++;
19                             continue;
20                         }
21                         break;                                            //两边不满足直接退出
22                     }
23                 }//if
24                 if(i - 1 >= 0 && i + 1 < s.length() && s.charAt(i - 1) == s.charAt(i + 1)){        //以i为中心
25                     int j = i + 1;
26                     int k = i - 1;
27 //                    i = i - 1;                                            //向中心两边扩展
28                     while(k >= 0 && j < s.length()){
29                         if(s.charAt(k) == s.charAt(j)){
30                             if((j - k + 1) > result.length())
31                                 result = s.substring(k, j + 1);
32                             k--;
33                             j++;
34                             continue;
35                         }//while
36                         break;
37                     }
38                 }
39             }
40             
41             return result;
42         }
43     }
44 }

 

posted on 2014-12-21 22:21  luckygxf  阅读(130)  评论(0编辑  收藏  举报

导航