给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
C++23 linesExpandCollapse
void expand(string& s, int l, int r, int& start, int& maxLen) {
while (l >= 0 && r < s.size() && s[l] ==s[r]) {
l--;
r++;
}
// 此时 l, r 在回文串的基础上多走了一步
int len = r - l - 1;
if (len > maxLen) {
maxLen = len; // 获取此回文串的长度
start = l + 1; // 获取此回文串的开头
}
}
string longestPalindrome(string s) {
int n = s.size();
int start = 0, maxLen = 1;
// 枚举每一个中心位置
for (int i = 0; i < n; i++) {
expand(s, i, i, start, maxLen);
expand(s, i, i + 1, start, maxLen);
}
return s.substr(start, maxLen);
}