21.Longest Palindromic Substring(最长回文子串)

Level:

  Medium

题目描述:

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"

思路分析:

  找出字符串的最长回文子串,我们遍历字符串,把每一个字符当做是回文串的中间元素,然后设置两个指针向两边扩展,如果两个指针对应的值相同则满足回文串的要求,继续向下扩展,否则停止。以下一个元素为回文串的中间元素,进行与上面相同的操作。最后我们选它们中间最长的串做为结果。

代码:

public class Solution{
    int lo,maxlen;  //回文串的起始坐标,和回文串的长度
    public String longestPalindrome(String s){
        if(s.length()<2)
            return s;
        for(int i=0;i<s.length()-1;i++){
            extendPalidrome(i,i,s); //假设回文串的长度为奇数
            extendPalidrome(i,i+1,s);//假设回文串的长度为偶数
        }
        return s.substring(lo,lo+maxlen);
    }
    public void extendPalidrome(int start,int end,String s){
        while(start>=0&&end<s.length&&s.charAt(start)==s.charAt(end)){
            start--;
            end++;
        }
        if(maxlen<end-start-1){   //更新最长回文串的长度
            lo=start+1;
            maxlen=end-start-1;
        }
    }
}
posted @ 2019-04-18 10:16  yjxyy  阅读(112)  评论(0编辑  收藏  举报