[leetcode] Longest Palindromic Substring 解题报告

题目链接:https://leetcode.com/problems/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, and there exists one unique longest palindromic substring.

思路:本题用到了一个中心法求回文数的算法。

要求一个字符串的最大回文数,最暴力的方法是穷举所有可能,即枚举[1, len]长度的子串,判断是否回文。这种方法的时间复杂度是O(n^3)。因此不可能通过测试集。

使用中心法求回文数的思路是借助两个指针,以一个字符为中心,或者以两个字符之间为中心向左右扫描,判断是否相等。如果即可将时间复杂度降为O(n^2)。

代码如下:

class Solution {
public:
    string longestPalindrome(string s) {
        int len = s.size();
        if(len == 0)
            return 0;
        int index, maxLen = 0, i=0, left, right;
        while(i < 2*len -1)
        {
            left = i/2;//i为奇数代表以两个字符之间的间隔为中心,为偶数代表以一个字符为中心
            right = i%2==1?(i/2 +1):i/2;
            while(left >= 0 && right < len)
            {
                if(s[left] == s[right])
                {
                    if(right - left +1 > maxLen)//更新最大长度及起始位置
                    {
                        maxLen = right - left +1;
                        index = left;
                    }
                    left--;
                    right++;
                }
                else
                    break;
            }
            i++;
        }
        return s.substr(index, maxLen);
    }
};


你可能感兴趣的:(LeetCode,算法,回文数,palindrome)