LeetCode-5. Longest Palindromic Substring

Description

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"

Solution 1(C++)

class Solution{
public:
    string longestPalindrome(string s){
        int len = INT_MIN;
        string ans;
        for(int i=0; i<s.size(); i++){
            int oddlen = helper(s, i, i);
            int evelen = helper(s, i, i+1);
            if(len > max(oddlen, evelen)) continue;
            string temp;
            if(oddlen > evelen){
                len = oddlen;
                temp = s.substr(i-oddlen+1, 2*oddlen-1);
            }
            else{
                len = evelen;
                temp = s.substr(i-evelen+1, 2*evelen);
            }
            if(temp.size()>ans.size()) ans = temp;
        }
        return ans;
    }

private:
    int helper(string s, int i, int j){
        int res = 0;
        while(i>=0 && j<s.size() && s[i]==s[j]){
            i--; j++; res++
        }
        return res;
    }
};

Solution 2(C++)

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size(), len = 0, start = 0;
        for(int i = 0; i < n; i++){
            int left = i, right = i;
            while(right < n && s[right+1] == s[right]) right++;
            i = right;
            while(left > 0 && right < n-1 && s[left-1] == s[right+1]){
                left--;
                right++;
            }

            if(len < right-left+1){
                len = right - left + 1;
                start = left;
            }
        }
        return s.substr(start, len);
    }
};

算法分析

这一道题可以参考其他题目:

解法二也不复杂。

程序分析

略。

猜你喜欢

转载自blog.csdn.net/zy2317878/article/details/80903956