zoukankan      html  css  js  c++  java
  • 【字符串】

    考前挣扎,奶一口,绝对不会考字符串(因为我不会)
    KMP算法:

    求出模式串在主串中出现的所有位置及nxt数组
    之后可能加上一个计算出现次数的函数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1000010;
    
    int slen, tlen;
    int nxt[N];
    char S[N], T[N];
    
    void getnxt(){
    	int j = 0, k = -1;
    	nxt[0] = -1;
    	while(j < tlen){
    		if(k == -1 || T[j] == T[k]) nxt[++j] = ++k;
    		else k = nxt[k];
    	}
    }
    
    void KMP(){
    	int i = 0, j = 0;
    	getnxt();
    	while(i < slen && j < tlen){
    		if(j == -1 || S[i] == T[j]) ++i, ++j;
    		else j = nxt[j];
    		if(j == tlen) printf("%d
    ", i-tlen+1), j = nxt[j];
    	}
    }
    
    int main(){
    	freopen("kmp.in", "r", stdin);
    	freopen("kmp.out","w",stdout);
    	
    	scanf("%s", S); scanf("%s", T);
    	slen = strlen(S);
    	tlen = strlen(T);
    
    	KMP();
    	for(int i = 1; i <= tlen; ++i) printf("%d ", nxt[i]);
    	puts("");
    	return 0;
    }
    
  • 相关阅读:
    js对象写法
    IE6双边距bug及其解决办法
    图片轮播
    盒子水平和垂直同时居中方法
    选项卡切换
    针对IE6兼容png
    html5兼容
    sublime快捷键总结
    七种设计原则
    Git基本命令
  • 原文地址:https://www.cnblogs.com/hanser/p/7815438.html
Copyright © 2011-2022 走看看