枚举:(中心扩展法)
每次选取中心点(枚举),从中心点开始,用双指针往两边延伸,记录长度;更改中心点(复杂度o(n)),执行上述步骤,总复杂度O(n2)
ps:每个中心点扩展出去的回文子串可能有两种情况,奇数长度、偶数长度,因此在程序中按顺序考虑这两种情况。
class Solution {
public:
string longestPalindrome(string s) {
string res;//res存储结果:最长回文子串
for(int i = 0; i<s.size(); i++){//逐个枚举中心点
//双指针分别指向中心点左右两侧,用于查找奇数长度的回文子串
int l = i-1, r = i+1;
while(l>=0 && r<s.size() && s[l]==s[r])
l--, r++;//满足条件就移动指针
if(res.size()<r-l-1)
res = s.substr(l+1, r-l-1);//取子串更新res
//重置双指针,准备寻找偶数长度的回文子串
l = i, r = i+1;
while(l>=0 && r<s.size() && s[l]==s[r])
l--, r++;
if(res.size()<r-l-1)
res = s.substr(l+1, r-l-1);
}
return res;//返回结果子串
}
};