【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:

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

 

Example:

Input: "cbbd"

Output: "bb"

判断最大回文子字符串。

一.暴力破解(超时)

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.length()==1)
            return s;
        
        int i=0, j=0;
        int maxLength = 0;
        string maxLongStr = "";
        string SubStr = "";
        for(i=0;i<s.length();i++){
            for(j=i+1;j<s.length();j++){
                if(s[j]==s[i]){
                    int left=i,right=j;
                    while(s[left]==s[right] && left<=right){
                        left++;right--;
                    }
                    if(right-left<0){
                        SubStr = s.substr(i, j-i+1);
                        if(SubStr.length()>maxLongStr.length())
                            maxLongStr = SubStr;
                    }
                    else{
                        string tem = "";
                        
                        SubStr = tem+s[i];
                        if(SubStr.length()>maxLongStr.length())
                            maxLongStr = SubStr;
                    }
                }
            }
        }
        return maxLongStr; 
        
    }
};

最后输入:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

这个输入有些变态,但是这个输入在我自己的电脑上用vs可以跑起来,但是提交到LeetCode上提示超时。

换一种方法,从中间向两边查找,中心可能是一个元素,也可以是两个重复元素,例如aba和abba都是回文。这种方法是O(n^2),提交后运行时间可以通过。

class Solution {
public:
     string longestPalindrome(string s) {
        if(s.length() == 1)
            return s;
        string tem="", maxSubStr="";
        
        for(int i=0; i<s.length(); i++){
            tem = getPlength(s,i,i);
            if(tem.length() > maxSubStr.length()){
                maxSubStr = tem;
            }
            if(i != s.length()-1){
                tem = getPlength(s,i,i+1);
                if(tem.length() > maxSubStr.length()){
                    maxSubStr = tem;
                }
            }
        }
        return maxSubStr;
    }
    string getPlength(string s, int left, int right){
        while(left>=0 && right<s.length() && s[left]==s[right]){
            left--;right++;
        }
        return s.substr(left+1,right-1-(left+1)+1);
    }

};

猜你喜欢

转载自blog.csdn.net/poulang5786/article/details/79898018