zoukankan      html  css  js  c++  java
  • kmp算法

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N = 1e4 + 10;
    int a[1000000],b[N];
    int nex[N];
    void GetNext(int *x,int len)
    {
    	//int len = s.lengt();
    	nex[0] = -1;
    	for(int i = 1,j = -1;i < len;i++)
    	{
    		while(j >= 0 && x[i] != x[j+1]) j = nex[j];
    		if(x[i] == x[j+1]) ++j;
    		nex[i] = j;
    	}
    }
    
    int kmp(int *x,int *y,int l1,int l2)
    {
    	//int l1 = s1.length(),l2 = s2.length();
    	int pos =  -1;
    	for(int i = 0,j = -1; i < l1;i++)
    	{
    		while(j >= 0 && (j == l2 - 1 || x[i] != y[j+1]))
    		j = nex[j];
    		if(x[i] == y[j+1])
    		++j;
    		if(j == l2 - 1)
    		{
    			pos = i - l2 + 2;
    			break;
    		}
    	}
    	return pos;
    }
    
    int main()
    {
    	int t,n,m;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d%d",&n,&m);
    		for(int i = 0;i < n;i++)
    		scanf("%d",&a[i]);
    		
    		for(int j = 0;j < m;j++)
    		scanf("%d",&b[j]);
    		
    		GetNext(b,m);
    		int ans = kmp(a,b,n,m);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    启发式搜索学习~~
    bzoj1032
    bzoj1037
    bzoj1029
    codevs1081 线段树练习 2
    bzoj1006
    bzoj1003
    Codeforces 607B Zuma
    20155326《网络对抗》网络欺诈技术防范
    20155326刘美岑 Exp6 信息收集与漏洞扫描
  • 原文地址:https://www.cnblogs.com/mch5201314/p/11962625.html
Copyright © 2011-2022 走看看