hdu 3068 最长回文

简介: 点击打开链接hdu 3068 思路:manacher求解字符串最长回文串 分析:详见点击打开链接 代码: #include#include#include#includeusing namespace std;#defin...

点击打开链接hdu 3068


思路:manacher求解字符串最长回文串

分析:详见点击打开链接

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

#define MAXN 240010

int ans;
char tmpStr[MAXN];
char String[MAXN];
int rad[MAXN];

/*求rad数组*/
void manacher(){
    
    ans = 0;
    int mx = 0;
    int id;
    int len = strlen(String);

    for(int i = 1 ; i < len ; i++){
        if(mx > i)
          rad[i] = min(rad[2*id-i] , mx-i);
        else
          rad[i] = 1;
        for(; String[i+rad[i]] == String[i-rad[i]] ; rad[i]++);
        if(rad[i]+i > mx){
          mx = rad[i]+i;
          id = i;
        } 
        ans = max(ans , rad[i]);   
    }
}

int main(){
    while(scanf("%s" , tmpStr) != EOF){
       /*求String*/
       int pos = 0;
       int len = strlen(tmpStr);
       String[pos++] = '$';
       for(int i = 0 ; i <= len ; i++){/*这里是枚举到len的长度*/
          String[pos++] = '#';
          String[pos++] = tmpStr[i];
       }
       manacher();
       printf("%d\n" , ans-1);
    }
    return 0;
}



目录
打赏
0
0
0
0
15
分享
相关文章
KMP算法(A + B for you again—HDU - 1867 )
KMP算法(A + B for you again—HDU - 1867 )
hdu 1262 寻找素数对
hdu 1262 寻找素数对
44 0
HDU-1262,寻找素数对(素数打表)
HDU-1262,寻找素数对(素数打表)
[HDU 4738] Caocao‘s Bridges | Tarjan 求割边
Problem Description Caocao was defeated by Zhuge Liang and Zhou Yu in the battle of Chibi. But he wouldn’t give up. Caocao’s army still was not good at water battles, so he came up with another idea. He built many islands in the Changjiang river,
154 0
HDU-1370,Biorhythms(中国剩余定理)
本题主要就是应用中国剩余定理。
HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)
HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)
146 0
HDOJ/HDU 1015 Safecracker(深搜)
HDOJ/HDU 1015 Safecracker(深搜)
113 0
HDOJ(HDU) 1406 完数
HDOJ(HDU) 1406 完数
120 0
HDU2032杨辉三角
有点强迫症,主函数必须简洁,但是这里的if判断语句很碍眼,自己也并没有想到什么不画蛇添足的方法使代码更加简洁......
1518 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等