筆記試験問題19.LeetCode OJ (5)
Longest Palindromic Substring---長男回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring
1.abaタイプの場合、回文列の長さは奇数個である.
2.abbaタイプで、この場合の回文列の長さは偶数個である.
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring
class Solution {
public:
string longestPalindrome(string s) {
// : ,
string ret;
int slen = s.size();
int maxlen = 1; //
int pos = 0; //
for(int i=0; i < slen; ++i)
{
int left = i;
int right = i;
int len = 0;
while(left>0 && right<(slen-1) && s[left-1] == s[right+1])
{// aba
--left;
++right;
len+=2;
}
if(len+1 > maxlen)
{
maxlen = len+1; //
pos = left;
}
left = i;
right = i+1;
len = 0;
while(left>=0 && right<slen && s[left] == s[right])
{// abba
++right;
--left;
len += 2;
}
if(len > maxlen)
{
maxlen = len; //
pos = left+1;
}
}
for(int j=0; j<maxlen ;++j)
{
ret.push_back(s[j+pos]);
}
return ret;
}
};
文字列の中の長男の文字列を探して、私の考えは1つの文字から順番に両側に探して、このように2つの状況に分けて討論します:1.abaタイプの場合、回文列の長さは奇数個である.
2.abbaタイプで、この場合の回文列の長さは偶数個である.