zoukankan      html  css  js  c++  java
  • HDU3068 最长回文 Manacher算法

    Manacher算法是O(n)求最长回文子串的算法,其原理很多别的博客都有介绍,代码用的是clj模板里的,写的确实是异常的简洁,现在的我只能理解个大概,下面这个网址的介绍比较接近于这个模板,以后再好好理解,我现在先放一放

    http://www.starvae.com/?p=212

    #pragma warning(disable:4996)
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<vector>
    #include<cmath>
    using namespace std;
    
    void palindrome(char cs[], int len[], int n) { //len[i] means the max palindrome length centered i/2
    	for (int i = 0; i < n * 2; ++i) {
    		len[i] = 0;
    	}
    	for (int i = 0, j = 0, k; i < n * 2; i += k, j = max(j - k, 0)) {
    		while (i - j >= 0 && i + j + 1 < n * 2 && cs[(i - j) / 2] == cs[(i + j + 1) / 2])
    			j++;
    		len[i] = j;
    		for (k = 1; i - k >= 0 && j - k >= 0 && len[i - k] != j - k; k++) {
    			len[i + k] = min(len[i - k], j - k);
    		}
    	}
    }
    
    char str[120000];
    int tlen[240000];
    int n;
    
    int main()
    {
    	while (~scanf("%s", str))
    	{
    		palindrome(str, tlen, strlen(str));
    		int ans = 0;
    		int mxlen = strlen(str);
    		for (int i = 0; i < 2 * mxlen; i++){
    			ans = max(ans, tlen[i]);
    		}
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    mysql数据库之多表查询
    mysql数据库之单表查询
    mysql数据库之表和库
    mysql数据库之windows版本
    mysql数据库之linux版本
    mysql数据库之mysql下载与设置
    python基础之逻辑题(3)
    python基础之逻辑题(2)
    python基础之逻辑题(1)
    spring boot统一异常处理
  • 原文地址:https://www.cnblogs.com/chanme/p/3561844.html
Copyright © 2011-2022 走看看