美文网首页
Leetcode 5 寻找最长回文子串

Leetcode 5 寻找最长回文子串

作者: hekirakuno | 来源:发表于2019-10-19 11:40 被阅读0次

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"

思路:中心扩散

class Solution {
    public String longestPalindrome(String s) {
        //扩展中心
        //记录下标位置
        int start = 0;int end = 0;
        //判断边界值
        if(s==null || s.length()<1){
            return s;
        }
        //遍历所有char,中心扩散
        //(1)abba式;(2)aba式
        for(int i = 0;i<s.length();i++){
            int len1 = centerExpand(s,i,i);
            int len2 = centerExpand(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 centerExpand(String s,int left,int right){
        //设置左开始下标为left;右开始下标为right
        int L = left;
        int R = right;
        //从left向左,right向右遍历,找到满足回文格式的字符串
        while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
            L--;
            R++;
        }
        //对于left == right,至少进一次循环,L--,R++之后相差为2;则需要减掉1,为本身;
        //对于left != right,至少不仅一次循环,所以R-L-1=0;
        return R-L-1;
    }
}

相关文章

网友评论

      本文标题:Leetcode 5 寻找最长回文子串

      本文链接:https://www.haomeiwen.com/subject/wyigmctx.html