leetcode 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"

中文理解:

找到给定字符串中最长的回文子串。

解题思路:

考虑回文串为奇数和偶数情况,遍历原字符串,每一位作为回文串的中心,不断向两边扩展,记录最大长度和回文串的开始位置,最后返回即可。

代码(java):

public class Solution {
    private int lo, maxLen;
    public String longestPalindrome(String s) {
        int len = s.length();
        if (len < 2)
            return s;

        for (int i = 0; i < len-1; i++) {
            extendPalindrome(s, i, i);  //假设回文串的长度为奇数
            extendPalindrome(s, i, i+1); //假设回文串的长度为偶数
        }
        return s.substring(lo, lo + maxLen);
    }
    private void extendPalindrome(String s, int j, int k) {
        while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) {
            j--;
            k++;
        }
        if (maxLen < k - j - 1) {
            lo = j + 1;
            maxLen = k - j - 1;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/leo_weile/article/details/89481880