LeetCode 5

https://leetcode-cn.com/problems/longest-palindromic-substring/

 

最长回文串,这个题的中心扩展思想很巧妙。动态规划实在是比较难掌握,也不是那么容易写。

中心扩展法,其实就是从字符串的每一个字符开始,分别向左右去寻找合规格的字符,情况如下

如果左边的字符和当前字符相等并且下标大于0,当前字符串长度++,左边下边--,直到不符合条件。

右边同理。

接着我们再判断左手边和右手边的字符是否相等,如果相等的话我们继续往左右两边进行扩展,同时总长度+2。

如果当前长度大于最大长度,更新最大长度和开始下标。

class Solution {
    public String longestPalindrome(String s) {
        if(s == null || s.length() == 0){
            return "";
        }
        int left = 0;
        int right = 0;
        int maxLength = 0;
        int start = 0;
        int length = s.length();
        int current = 1;
        for(int i = 0; i <length;i++){
            left = i-1;
            right = i+1;
            while(left>=0 && s.charAt(left) == s.charAt(i)){
                current++;
                left--;
            }
            while(right<length&& s.charAt(right) == s.charAt(i)){
                current++;
                right++;
            }
            while(left>=0 && right<length && s.charAt(left) == s.charAt(right)){
                current = current +2;
                left--;
                right++;
            }
            if(current>maxLength){
                maxLength = current;
                start = left;
            }
            current = 1;
        }
        return s.substring(start+1, start+maxLength+1);
    }
}
View Code

 

posted @ 2020-04-22 21:52  ZJPang  阅读(177)  评论(0编辑  收藏  举报