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;
    }
    
  • 相关阅读:
    1334: 好老师
    poj 2255 Tree Recovery
    2006浙大:简单计算器
    POJ1001(C++处理大数)
    HDU2159(二维完全背包)
    POJ2080:Calendar(计算日期)
    2008上交:Day of Week
    POJ1365:质因数分解
    VIJOS:P1706(舞会)
    POJ2449:K短路
  • 原文地址:https://www.cnblogs.com/hzf29721/p/10223108.html
Copyright © 2011-2022 走看看