LeetCode 每日一题 5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#pragma GCC optimize("O2")
#pragma G++ optimize("O2")
class Solution {
public:
string longestPalindrome(string s) {
const int n = s.length();
string ans;
for(int i = 0, len, m = 0; i < n; ++i) {
for(len = n - i; len > 0 && len > m; --len) {
if(isPalindrome(s, i, i + len - 1)) {
if(len > ans.length()) {
ans = s.substr(i, len);
m = ans.length();
}
break;
}
}
}
return ans;
}
bool isPalindrome(const string &s, int p, int q) {
while(p < q && s[p] == s[q])
p++, q--;
return p >= q;
}
};