栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Manacher算法----马拉车算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Manacher算法----马拉车算法

看到了一个十分不错的manacher教程,原作者用java写的,我这里改成了C++

融汇贯通的自己的理解

原文:老司机开车,教会女朋友什么是「马拉车算法」_吴师兄学编程 (cxyxiaowu.com)

对于算法核心的说明,原帖讲的是浅显易懂,这里就拉两张图片,方便日后巩固

#include 
#include 
using namespace std;

char T[20002],T1[10001];
//预处理
void replay()
{
    int index = 1;
    T[0] = '#';
    int len = strlen(T1);
    //cout <<"len = " <=0&&rightMaxright){
            Maxright = i + p[i];
            center = i;
        }
        if(p[i]>Maxlen){
            Maxlen = p[i];
            address->begin = (i - p[i])/2;
            address->end = address->begin + Maxlen - 1;
        }
    }
    return *address;
}
int main()
{
    cin >> T1;
    replay();
    Address address = manacher();
    for(int i=address.begin;i<=address.end;i++){
        cout << T1[i];
    }
    return 0;
}

 

 对这个图片特别说明:三个黄C必定相等,而最左边的C和紫色的e一定不相等,所以说就有了紫色的e和最右边的c一定不相等,也就是不能匹配,从而确定p[i]的值

dui 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号