5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入:"babad"
输出:"bab"
注意:"aba"也是一个有效答案。
示例 2:
输入:"cbbd"
输出:"bb"
思路:
对于每一个s[i]来说,分为偶数字符串和奇数字符串,然后分别对比成回文的长度,取最长的那个,然后i++,得到最长的回文字符串长度。
注意:substr的用法
class Solution {
private:
int lo;
int Maxlen;
public:
string longestPalindrome(string s) {
int i,j,k;
if(s.size()<2)
return s;
for(i=0;i<s.size();i++)
{
ifOddPalindrome(s,i,i);
ifOddPalindrome(s,i,i+1);
}
return s.substr(lo,Maxlen); //注意此处s.substr(a,b)的用法,提取从a开始,b处的字符串
}
void ifOddPalindrome(string s,int k,int j){
while(k>=0&&j<s.size()&&s[k]==s[j])
{
k--;
j++;
}
if(Maxlen<j-k-1){
lo=k+1;
Maxlen=j-k-1;
}
}
};