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
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. aba类型的,这种情况下回文串的长度为奇数个。
2. abba类型的,这种情况下回文串的长度为偶数个。