zoukankan      html  css  js  c++  java
  • 字符串算法模板合集

    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;
    }
    
  • 相关阅读:
    非旋Treap——fhq treap
    LCA
    树链剖分
    复习计划
    BZOJ2565: 最长双回文串(回文树)
    回文自动机
    luogu P3796 【模板】AC自动机(加强版)
    【BZOJ2908】 又是nand
    【HDU2460】 Network
    【CF786B】 Legacy
  • 原文地址:https://www.cnblogs.com/hzf29721/p/10223108.html
Copyright © 2011-2022 走看看