LeetCode 5. 最長迴文子串(C、C++、python)
阿新 • • 發佈:2018-12-02
給定一個字串 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