题目
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
解答(中心扩展)
class Solution {
public:
string longestPalindrome(string s) {
int start = 0;
int end = 0;
for (int i = 0;i<s.length();i++) {
int len = max(expand(s,i,i),expand(s,i,i+1));
if(len>end-strat) {
start = i - (len+1)/2 +1;
end = i + len/2;
}
}
return s.substr(start,end-strat+1);
}
public:
int expand(string s,int L,int R) {
while(L>=0&&R<=s.length()&&s[L]==s[R]) {
L--;
R++;
}
return R-L-1;
}
}
expand函数的返回值:
x a b c b a y
^^
| |
L R
x a b c b a y
0 1 2 3 4 5 6
^ ^
| |
L R
MaxLength=5=6-0-1
return R-L-1
start的算法:
start = 1 = 3- (5+1)/2 +1
start = i - (len+1)/2 +1