这道题题意很简单,就是求给定字符串的最长回文子串
我的思路就是先找中心点,然后往两边扩展,直到出边界或不相等,然后记录本次回文串的长度,若比之前最长的长度要长,就修改原值,并记录当前的子串。
参考代码如下:
class Solution {
public:
string longestPalindrome(string s) {
string res = "";
int len = s.length();
int j = 0, k = 0, maxn = 0, tmp = 0;
for(int i = 0; i < len; ++i)
{
for(j = i+1, k = i; j<len && k>=0 && s[j] == s[k]; ++j, --k);
tmp = j-k-1;
if(tmp > maxn)
{
maxn = tmp;
res = s.substr(k+1, tmp);
}
for(j = i, k = i; s[j] == s[k] && j<len && k>=0; ++j, --k);
tmp = j-k-1;
if(tmp > maxn)
{
maxn = tmp;
res = s.substr(k+1, tmp);
}
}
return res;
}
};
tmp是当前子串的长度,maxn是之前记录的最长子串的长度,初始化为0
由于子串可能是奇数长度,也可能是偶数长度,因此中心点可能是最中间的那个字符(奇数长),也可能是中间两个字符(偶数长),因此需要分两种情况讨论。