力扣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. 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

力扣5. 最长回文子串

精选力扣500题 第30题 LeetCode 5. 最长回文子串c++ / java 详细题解

5. 最长回文子串(LeetCode力扣算法 - java / rust)

5. 最长回文子串(LeetCode力扣算法 - java / rust)

力扣5. 最长回文子串

力扣5. 最长回文子串