美文网首页
LeetCode #5 : Longest Palindromi

LeetCode #5 : Longest Palindromi

作者: 雒霭 | 来源:发表于2017-03-04 10:41 被阅读12次

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

    Example:

    Input: "babad"
    
    Output: "bab"
    
    Note: "aba" is also a valid answer.
    

    Example:

    Input: "cbbd"
    
    Output: "bb"
    

    指向中间字符之后向前后两个方向扫描,能够满足回文序列的最大长度,记录这个长度和起始位置,并不断推进中间位置,直到string的末尾,返回最长回文序列子串。

    string longestPalindrome(string s) {
        if (s.empty()) return "";
        if (s.size() == 1) return s;
        int min_start = 0, max_len = 1;
        for (int i = 0; i < s.size();) {
          if (s.size() - i <= max_len / 2) break;
          int j = i, k = i;
          while (k < s.size()-1 && s[k+1] == s[k]) ++k; // Skip duplicate characters.
          i = k+1;
          while (k < s.size()-1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // Expand.
          int new_len = k - j + 1;
          if (new_len > max_len) { min_start = j; max_len = new_len; }
        }
        return s.substr(min_start, max_len);
    }
    

    相关文章

      网友评论

          本文标题:LeetCode #5 : Longest Palindromi

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