力扣5. 最长回文子串
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣5. 最长回文子串相关的知识,希望对你有一定的参考价值。
https://leetcode-cn.com/problems/longest-palindromic-substring/
方法一: 最暴力做法, 时间复杂度O(n3)
class Solution {
public:
string longestPalindrome(string s) {
int ans=0;
string ss;
for(int i=0;i<s.size();i++)//枚举左端点
{
for(int j=i;j<s.size();j++)//右端点
{
bool flag=true;
int temp=j-i+1;
for(int k=0;k<temp/2;k++)//判断
{
if(s[k+i]!=s[i+temp-k-1]){
flag=false;
break;
}
}
if(temp>ans&&flag)
{
ans=temp;
ss=s.substr(i,j-i+1);
}
}
}
return ss;
}
};
方法二:用双指针暴力,时间复杂度O(n2)
首先回文子串有两种:
- 奇数回文串
- 偶数回文串
我们得分开讨论,方法是枚举中间的字符,然后双指针向两边扩展,直到不相等为止。
class Solution {
public:
string longestPalindrome(string s) {
string ss;
for(int i=0;i<s.size();i++)
{
int l=i-1,r=i+1;//奇数
while(l>=0&&r<s.size()&&s[l]==s[r]) l--,r++;
int temp=(r-1)-(l+1)+1;///我们得回去 因为不想等时 r++,l-- 了故得回去
if(temp>ss.size()) ss=s.substr(l+1,temp);
l=i,r=i+1;//偶数
while(l>=0&&r<s.size()&&s[l]==s[r]) l--,r++;
temp=(r-1)-(l+1)+1;
if(temp>ss.size()) ss=s.substr(l+1,temp);
}
return ss;
}
};
以上是关于力扣5. 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第30题 LeetCode 5. 最长回文子串c++ / java 详细题解
5. 最长回文子串(LeetCode力扣算法 - java / rust)