zoukankan      html  css  js  c++  java
  • 最长回文串

    int Manacher()      //  处理 s 字符串 , 得到其 最长回文串
    {
        int len=strlen(s),id=0,maxlen=0;                        //  字符串长度   ,
        for(int i=len;i>=0;--i)                        // 插入 # 解决 , 长度为奇偶的问题 .
        {                             //插入'#'
            s[i+i+2]=s[i];
            s[i+i+1]='#';
        }                                       //插入了len+1个'#',最终的s长度是1~len+len+1即2*len+1,首尾s[0]和s[2*len+2]要插入不同的字符
        s[0]='*';                                       //s[0]='*',s[len+len+2]='',防止在while时p[i]越界
        for(int i=2;i<2*len+1;++i)   // 完善好字符串之后 ,
        {
            if(p[id]+id>i)
                p[i]=min(p[2*id-i],p[id]+id-i);  //   如果超过的话 , 右边(p[id]+id-i)的大 如果不超过的话 左边(p[2*id-i])的 大
            else
                p[i]=1;
            while(s[i-p[i]] == s[i+p[i]])    // 第 26 -- 29 , 32 33  都是为了 减小时间复杂度 来设置的 .
                p[i]++;
            if(id+p[id]<i+p[i])    // 这个 id+p[id] 是模式串中已经解决的 最右端 问题 .
                id=i;
            if(maxlen<p[i])
                maxlen=p[i];
        }
        return maxlen;
    }
  • 相关阅读:
    nginx 配置文件详解
    nginx的location匹配规则
    mysql常用函数
    jquery封装的ajax请求
    docker
    in与exists和not in 与 not exists的区别
    mysql授权
    线程池
    springboot+rediscluster
    常用网址
  • 原文地址:https://www.cnblogs.com/A-FM/p/5520646.html
Copyright © 2011-2022 走看看