leetcode 5. 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.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"

 

还是用DP来递归,抓住回文字符串的“中心”(对称轴)来考虑,一共可能有2n-1个对称轴。单独写一个expand函数来计算该对称轴对应的最大回文字符串长度。

expand的思想就是:当l,r两个字符相等时,就可认为l-1到r+1之间的也是回文字符串。

class Solution {
    public String longestPalindrome(String s) {
        if(s == null || s.length() == 0) return "";
        int start = 0, end = 0;
        for(int i=0; i<s.length();i++) {
            int len1 = expand(s,i,i);
            int len2 = expand(s,i,i+1);
            int len = Math.max(len1,len2);
            if(len > end - start){
                start = i - (len-1)/2;
                end = i + len/2;
            }
        }
        return s.substring(start, end+1); //记住这个用法(直接取子集)
    }
    
    public int expand(String s, int l, int r){
        while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)) {
            l--;
            r++;
        }
        return r-l-1;
    }
}

 

posted @ 2019-01-26 20:52  JamieLiu  阅读(97)  评论(0编辑  收藏  举报