码迷,mamicode.com
首页 > 其他好文 > 详细

字符串模版

时间:2019-08-06 00:35:56      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:using   ini   amp   ons   max   char s   mes   space   std   

#include <bits/stdc++.h>

using namespace std;
const int maxn = 1e5+10;
char s[maxn], t[maxn];
int nxt[maxn], ext[maxn], f[maxn], p[maxn];

//kmp
void getNext(char *t) {
    nxt[0] = 0;
    for (int i=1, j=0; t[i]; ++i) {
        while(j && t[i]!=t[j]) j=nxt[j-1];
        if(t[i]==t[j]) ++j;
        nxt[i] = j;
    }
}
bool kmp(char *s, char *t) {
    getNext(t);
    bool fg = false, l = strlen(t);
    for (int i=0, j=0; s[i]; ++i) {
        while(j && s[i]!=t[j]) j=nxt[j-1];
        if(s[i]==t[j]) ++j;
        f[i] = j;
        if(j==l) fg = 1;
    }
    return fg;
}

//exkmp
void getNext(char *t, int m) {
    int a=0, p=0;
    nxt[0] = m;
    for (int i=1; i<m; ++i) {
        if(i>=p || i+nxt[i-a]>=p) {
            if(i>=p) p=i;
            while(p<m && t[p]==t[p-i]) ++p;
            nxt[i]=p-i;
            a=i;
        } else {
            nxt[i] = nxt[i-a];
        }
    }
}
void getExt(char *s, int n, char *t, int m) {
    getNext(t, m);
    int a=0, p=0;
    for (int i=0; i<n; ++i) {
        if(i>=p || i+nxt[i-a]>=p) {
            if(i>=p) p=i;
            while(p<n && p-i<m && s[p]==t[p-i]) ++p;
            ext[i] = p-i;
            a=i;
        } else {
            nxt[i] = nxt[i-a];
        }
    }
}

// manacher
char str[maxn], ms[maxn];
void init(char *s) {
    ms[0]='@', ms[1]='#';
    for (int i=1; s[i]; ++i) ms[i<<1]=s[i], ms[i<<1|1]='#';
    int l = strlen(s); 
    ms[2*l+2] = '@', ms[2*l+3] = 0;
}
void manacher(char *str) {
    init(str);
    int l = strlen(ms);
    int mx=0, id=0;
    for (int i=1; i<l; ++i) {
        p[i] = mx>i?min(mx-i, p[2*id-i]): 1;
        while(p[i]+1<l && ms[i-p[i]]==ms[i+p[i]]) ++p[i];
        if(p[i]>mx) mx=p[i], id=i;
    }
}

int main() {

    return 0;
}

字符串模版

标签:using   ini   amp   ons   max   char s   mes   space   std   

原文地址:https://www.cnblogs.com/acerkoo/p/11306378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!