# Longest Palindromic Substring - 字符串中最长的回文字段

int palindrome(String ps,int left,int right) 这个方法用来判断回文字段，返回字段长度

String longestPalindrome(String s) 在这里调用palindrome方法，遍历字符串去找。遍历过程注意不要越界。

 1 /**
2  * @author Rust Fisher
3  * @date 2015-9-14
4  */
5 public class LongestPalindromicSubstring {
6     /**
7      * @param s - input string
8      * @return the Longest Palindromic Substring
9      */
10     public static String longestPalindrome(String s) {
11         String result = "";
12         int inputLenght = s.length();
13         int startIndex = 0;
14         int longest = 1;
15
16         for (int i = 0; i < inputLenght; i++) {
17             int oddLen = 1,dualLen = 1, currentLen;
18             oddLen = palindrome(s, i, i);
19             if (i+1 < inputLenght) {
20                 dualLen = palindrome(s, i, i+1);
21             }
22             currentLen = dualLen > oddLen ? dualLen : oddLen;
23             if (currentLen > longest){
24                 longest = currentLen;
25                 if (longest%2 == 0) {
26                     startIndex = i - longest/2 + 1;
27                 } else {
28                     startIndex = i - longest/2;
29                 }
30             }
31         }
32         for (int i = startIndex; i < startIndex+longest; i++) {
33             result += s.charAt(i);
34         }
35         return result;
36     }
37     /**
38      * @param ps - input string
39      * @param left - index move left
40      * @param right - index move right
41      * @return the current length of palindrome
42      */
43     public static int palindrome(String ps,int left,int right){
44         int thislen = 0;
45         int len = ps.length();
46         while(left >= 0 && right < len && ps.charAt(left) == ps.charAt(right)){
47             left--;
48             right++;
49         }
50         thislen = right - left - 1;
51         return thislen;
52     }
53     public static void main(String args[]){
54         System.out.println(longestPalindrome("hfiwafhaabbaaccddio128213"));
55         System.out.println(longestPalindrome("abcdefgfedcba"));
56         System.out.println(longestPalindrome("abc"));
57     }
58 }

aabbaa
abcdefgfedcba
a

+ 订阅