LeetCode 5. 最長回文サブストリング(C、C++、python)
3666 ワード
1つの文字列
例1:
例2:
解法:本題と647.回文は構想が同じである
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=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