-
中等
给你一个字符串
s,找到s中最长的 回文子串。示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2:
输入:s = "cbbd" 输出:"bb"提示:
1 <= s.length <= 1000s仅由数字和英文字母组成
代码
class Solution {
public:
string longestPalindrome(string s) {
if(s.empty())return "";
int start = 0, maxLength=1;
for(int i=0;i<s.length();i++)
{
int len1=expandFromCenter(s, i, i);//奇数个
int len2=expandFromCenter(s, i, i+1);//偶数个
int len=max(len1, len2);
if(len>maxLength)
{
maxLength=len;
start=i-(len-1)/2;
}
}
return s.substr(start, maxLength);
}
private:
int expandFromCenter(const string &s, int left, int right)
{
while(left>=0&&right<=s.length()&&s[left]==s[right])
{
left--;
right++;
}
return right-left-1;
}
};
使用中心扩展算法,以某一个字符为中心向左右两边扩展,区分奇偶两种情况,返回最大值,然后与现在的最大值进行对比。
874

被折叠的 条评论
为什么被折叠?



