• 最大算法【Manacher模板】HDU 3068——求最长回文子串


    题记:写这篇博客要主是加深自己对最大算法的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

        来源:点击打开链接

        直接做会超时,须要优化,网上通行的算法是manacher算法(详细原理还不是很明确),这里可以当模板使。

        每日一道理
    书籍好比一架梯子,它能引领人们登上文化的殿堂;书籍如同一把钥匙,它将帮助我们开启心灵的智慧之窗;书籍犹如一条小船,它会载着我们驶向知识的海洋。
    // 原串最大长度N
    // 返回最大回文字串 res
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N = 110009;
    
    int rid[N<<2];
    string manacher(char *s){
        string t, res;    
        int L = strlen(s);    
        // init
        t += '?';
        for(int i = 0; i < L; i++)
            t += '#', t += s[i];
        t += "#*";
        // getrid
        for(int i=1,j=0,k,End=(int)t.size();i<End;){
            while( t[i-j-1]==t[i+j+1] ) j++;
            rid[i] = j;
            for(k=1;k<=j&&(rid[i-k]!=rid[i]-k);k++) 
                rid[i+k] = min( rid[i-k], rid[i]-k );
            i += k;
            j = max( 0,j-k );
        }    
        // Max
        int m = 0, pos;
        for(int i = 1; i < (int)t.size(); i++){
            if( m < rid[i]*2+(t[i]!='#') )
                m = rid[i]*2+(t[i]!='#'), pos = i;
        }
        for(int i = pos-rid[pos]; i <= pos+rid[pos]; i++){
            if( t[i] != '#' ) res += t[i];    
        }
        return res;
    }
    
    
    int main()
    {
        char s[N];
        while(scanf("%s", s)!=EOF)
        {
        	 string ans = manacher(s); 
    	//    printf("MaxLength = %d\n", ans.size() );
    	      printf("%d\n", ans.size() );
        		
        }
       return 0;
    }

    文章结束给大家分享下程序员的一些笑话语录: 腾讯的动作好快,2010年3月5日19时28分58秒,QQ同时在线人数1亿!刚刚看到编辑发布的文章,相差才2分钟,然后连专题页面都做出来了,他们早就预料到了吧?(其实,每人赠送10Q币,轻轻松松上两亿!)

  • 相关阅读:
    activityalias 的使用
    关于淘宝直通车的那些事(二):关键词选词方法
    Laucher 九宫格风格 长按移动删除 宫格
    NSAutoReleasePool的理解
    类似人人网的侧滑动层叠窗口实现及代码
    从应用中启动另外的应用
    android应用 获取本地指定类型文件 的两种最优方法
    获取手机中安装的所有应用程序
    Spring事务配置的五种方式【转】
    [转]理解inode
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3091789.html
Copyright © 2020-2023  润新知