算法5. Longest Palindromic Substring

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"

给一个字符串s,找到最长的回文子串。假设字符串s的长度最长为1000.

思路一,判断回文,有一个方法,就是反转字符串,判断是否相同。这道题,我们可以直接反转,然后暴力遍历两个字符串,判断子串是否有相同的,然后找出最长的回文子串。那么这么做时间复杂度为O(n2)。
思路二,但这个题找子串其实没必要反转,按照普通的判断回文的方式判断即可。

以下为代码:

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;
    }
}

你可能感兴趣的:(算法5. Longest Palindromic Substring)