字符串算法模板合集

Posted hzf29721

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串算法模板合集相关的知识,希望对你有一定的参考价值。

1、KMP

KMP模板

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define INF 2147483647
#define mem(i,j) memset(i,j,sizeof(i))
#define F(i,j,n) for(register int i=j;i<=n;i++)
using namespace std;
char s1[1000010],s2[1000010];
int Next[1000010],l1,l2;
inline int read(){
    int datta=0;char chchc=getchar();bool okoko=0;
    while(chchc<'0'||chchc>'9'){if(chchc=='-')okoko=1;chchc=getchar();}
    while(chchc>='0'&&chchc<='9'){datta=datta*10+chchc-'0';chchc=getchar();}
    if(okoko==1)return -datta;return datta;
}
inline void get_Next(){
    int j=0;
    F(i,1,l2){
        while(j&&s2[j+1]!=s2[i+1])
            j=Next[j];
        if(s2[j+1]==s2[i+1])
            j++;
        Next[i+1]=j;
    }
}
inline void kmp(){
    int j=0;
    F(i,1,l1){
        while(j&&s2[j+1]!=s1[i])
            j=Next[j];
        if(s2[j+1]==s1[i])
            j++;
        if(j==l2){
            printf("%d
",i-j+1);
            j=Next[j];
        }
    }
}
int main(){
    scanf("%s%s",s1+1,s2+1);
    l1=strlen(s1+1);l2=strlen(s2+1);
    get_Next();
    kmp();
    F(i,1,l2-1)
        printf("%d ",Next[i]);
    printf("%d
",Next[l2]);
    return 0;
}

以上是关于字符串算法模板合集的主要内容,如果未能解决你的问题,请参考以下文章

VS Code中小程序与Vue常用插件合集(前端合集)

如何在导航抽屉活动模板中的片段之间传递字符串变量

排序算法实现合集-经典内外排序算法实现

优雅代码09-idea断点插件模板合集

片段(Java) | 机试题+算法思路+考点+代码解析 2023

常用算法合集