leetcode题集——最长回文子串(待整理)

Given a string S, find the longest palindromic substring in S

You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。

回文子串,顾名思义,即字符串中满足回文性质的子串。比如输入字符串 "google",由于该字符串里最长的对称子字符串是 "goog",因此输出4。

方法一:中心扩展法

这个算法思想其实很简单啊,时间复杂度为O(n^2),空间复杂度仅为O(1)。就是对给定的字符串S,分别以该字符串S中的每一个字符C为中心,采用双指针法left和right,向两边扩展记录下以字符C为中心的回文子串的长度。但是有一点需要注意的是,回文的情况可能是奇数个字符,如 a b a,也可能是偶数个字符,如 a b b a。此时,首先找出两个相邻元素相等的值,再向两边扩展。

string longestPalindrome(string s)
    {
        int len=s.size();
        if(len==0) return s;
       
        string sub="";
        //当对称字符为奇数个时
        for(int i=0;i<len;i++)
        {
          int left=i;
          int  right=i;
          while(left>0&&right<len-1&&s[left-1]==s[right+1])
          {
              left--;
              right++;
          }
            if(sub.size()<right-left+1)
                sub=s.substr(left,right-left+1);
        }
        //当对称点字符为偶数个时
        for(int i=0;i<len-1;++i)
        {
           if(s[i]==s[i+1])
           {
           int left=i;
           int right=i+1;
           while(left>0&&right<len-1&&s[left-1]==s[right+1])
           {
               left--;
               right++;
           }
            if(sub.size()<right-left+1)
                sub=s.substr(left,right-left+1);
           }
        }
        return sub;
    }

方法二:Manacher算法

 时间复杂度O(N)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值