LeetCode 5. 最长回文子串(C、C++、python)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

解法:本题和  647. 回文子串 思路一样

C

char* longestPalindrome(char* s) 
{
    int n=strlen(s);
    int start=0;
    int end=0;
    for(int i=0;i<n-1;i++)
    {
        int left=i-1;
        int right=i+1;
        while(left>=0 && right<=n-1)
        {
            if(s[left]==s[right])
            {
                if(right-left>end-start)
                {
                    start=left;
                    end=right;
                }
                left--;
                right++;
            }
            else
            {
                break;
            }
        }
        left=i;
        right=i+1;
        while(left>=0 && right<=n-1)
        {
            if(s[left]==s[right])
            {
                if(right-left>end-start)
                {
                    start=left;
                    end=right;
                }
                left--;
                right++;
            }
            else
            {
                break;
            }
        }
    }  
    int length=end-start+1;
    char* res=(char*)malloc(sizeof(char)*(length+1));
    for(int i=0;i<length;i++)
    {
        res[i]=s[i+start];
    }
    res[length]='\0';
    return res;
}

C++

class Solution {
public:
    string longestPalindrome(string s) 
    {
        int n=s.length();
        string res=s.substr(0,1);
        for(int i=0;i<n-1;i++)
        {
            int left=i-1;
            int right=i+1;
            while(left>=0 && right<=n-1)
            {
                if(s[left]==s[right])
                {
                    if(right-left+1>res.length())
                    {
                        res=s.substr(left,right-left+1);                  
                    }
                    left--;
                    right++;
                }
                else
                {
                    break;
                }
            }
            left=i;
            right=i+1;
            while(left>=0 && right<=n-1)
            {
                if(s[left]==s[right])
                {
                    if(right-left+1>res.length())
                    {
                        res=s.substr(left,right-left+1);                  
                    }
                    left--;
                    right++;
                }
                else
                {
                    break;
                }
            }
        }
        return res;
    }
};

python

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        n=len(s)
        res=s[0:1]
        for i in range(0,n-1):
            left=i-1
            right=i+1
            while left>=0 and right<=n-1:
                if s[left]==s[right]:
                    if right-left+1>len(res):
                        res=s[left:right+1]
                    left-=1
                    right+=1
                else:
                    break
            left=i
            right=i+1
            while left>=0 and right<=n-1:
                if s[left]==s[right]:
                    if right-left+1>len(res):
                        res=s[left:right+1]
                    left-=1
                    right+=1
                else:
                    break
        return res
        

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/84650800
今日推荐