zoukankan      html  css  js  c++  java
  • leetCode- Longest Palindromic Substring

    判断回文(recursive)

    两个条件:

    1. 终止条件,当字符串长度为1或0时,肯定为回文
    2. 当字符串s长度大于1时, s回文的条件是  s[s.begin()+1,s.end()-1]回文并且  *s.begin()==*s.end()
    bool ishuiwen(string s)
    {
        if(s.size()<=1)
         return true;
        string s1=s.substr(1,s.size()-2);
        bool issub=ishuiwen(s1);
        if(*s.begin()==*(s.end()-1)&&issub==true)
            return true;
        else
            return false;
    
    }

    string中*s.end() 是‘’. 

    不使用递归:

    bool ishuiwen2(string s)
    {
       for(int i=0;i<s.size()/2;i++)
       {
              if(s[i]!=s[s.size()-i-1])
        return false;
       }
     return true;
    
    
    }

    得到最长的子回文字符串,最简单的做法得到所有字符串是否回文,记录长度,比较得到最长的。

    string longstr(string s)
    {
        bool is;
        int nowl=1;
        int longl=1;
        string longsub;
        string s1;
        for(int i=0;i<s.size();i++)
        {
            for(int  j=i+1;j<=s.size();j++)
            {
              s1=s.substr(i,j-i);
              cout<<s1<<endl;
              is=ishuiwen2(s1);
               if(is)
                nowl=s1.size();
                cout<<nowl<<endl;
                cout<<longl<<endl;
                cout<<longsub<<endl;
                if(nowl>longl)
                {
                     longl=nowl;
                     longsub=s1;
                }
    
    
            }
        }
        return longsub;
    }

    要进行两次循环,时间复杂度高。O(n^3);

    改进中心扩展法:

    字符串可能为奇数个或偶数个,奇数个时从一个中心点扩展,偶数个时从两个中心点扩展向左右扩展。O(n^2);

    string longstr2(string s)
    {
        string subl;
        int maxl=0;
        int nowl=1;
        int left;
        int right;
        for(int i=0;i<s.size();i++)
        {
          //  if(s.size()%2==1)
            {
                 left=i-1;
             right=i+1;
             nowl=1;
            }
           // else
    
    
            while(left>=0&&right<=s.size()&&s[left]==s[right])
            {
                left--;
                right++;
                nowl+=2;
            }
            if(nowl>maxl)
            {
                maxl=nowl;
                subl=s.substr(left+1,right-left-1);
                cout<<nowl<<endl;
                cout<<subl<<endl;
    
            }
            {
             left=i;
             right=i+1;
             nowl=0;
            }
            while(left>=0&&right<=s.size()&&s[left]==s[right])
            {
                left--;
                right++;
                nowl+=2;
            }
            if(nowl>maxl)
            {
                maxl=nowl;
                subl=s.substr(left+1,right-left-1);
                cout<<nowl<<endl;
                cout<<subl<<endl;
    
            }
        }
        return subl;
    }
  • 相关阅读:
    案例(2)-- 线程不安全对象(SimpleDateFormat)
    案例(1)-- OOM异常
    jvm--工具
    死锁的产生以及定位死锁
    TCP--粘包拆包,netty的解决方式
    netty--处理器
    AtomicIntegerFieldUpdater和AtomicInteger
    NIO--ByteBuf
    Pipeline
    吴恩达机器学习笔记(四) —— BP神经网络
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7157308.html
Copyright © 2011-2022 走看看