题目描述(中等难度)
算法
(中心扩展法)
- 因为回文子串是对称的,所以可以遍历每个点,然后以每个点为中心往两侧扩展,记录能形成的最长回文子串,同时注意分奇偶两种情况
时间复杂度是 ,空间复杂度是
C++代码
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size(), rmax = 0;
string res;
// 中心扩展法(对称)
for(int k = 0; k < n; k ++) {
int i = k - 1, j = k + 1;
while(i >= 0 && j < n && s[i] == s[j]) i --, j ++;
int len = j - i - 1;
if (len > rmax) {
rmax = len;
res = s.substr(i + 1, len);
}
}
for (int k = 0; k < n - 1; k ++) {
int i = k, j = k + 1;
while(i >= 0 && j < n && s[i] == s[j]) i --, j ++;
int len = j - i - 1;
if (len > rmax) {
rmax = len;
res = s.substr(i + 1, len);
}
}
return res;
}
};
写在最后:我的博客主要是对计算机领域所学知识的总结、回顾和思考,把每篇博客写得通俗易懂是我的目标,分享技术和知识是一种快乐 ,非常欢迎大家和我一起交流学习,有任何问题都可以在评论区留言,也期待与您的深入交流(^∀^●)