简单记录学习~
给你一个字符串 s
,找到 s
中最长的 回文 子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
O(n^2)
cpp
class Solution {
public:
string longestPalindrome(string s) {
int start = 0, maxLen = 1;
int n = s.size();
auto expandAroundCenter = [&](int left, int right) {
while (left >= 0 && right < n && s[left] == s[right]) {
--left;
++right;
}
return make_pair(left + 1, right - left - 1); // 起始位置,长度
};
for (int i = 0; i < n; ++i) {
auto [l1, len1] = expandAroundCenter(i, i); // 奇数回文
auto [l2, len2] = expandAroundCenter(i, i + 1); // 偶数回文
if (len1 > maxLen) {
start = l1;
maxLen = len1;
}
if (len2 > maxLen) {
start = l2;
maxLen = len2;
}
}
return s.substr(start, maxLen);
}
};