LeetCode 5. 最長回文サブストリング(C、C++、python)

3666 ワード

1つの文字列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=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

C++
class Solution {
public:
    string longestPalindrome(string s) 
    {
        int n=s.length();
        string res=s.substr(0,1);
        for(int i=0;i=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