zoukankan      html  css  js  c++  java
  • KMP模式匹配算法 分类: C/C++ 2015-07-01 16:41 150人阅读 评论(0) 收藏

    /*字符串匹配*/
    #include<iostream>
    using namespace std;
    
    void get_next(string T,int *next)
    {//朴素算法
    	int i,j;
    	i=1;
    	j=0;
    	next[1]=0;
    	while(i<T.length())
    	{
    		if(j==0 || T[i]==T[j])
    		{
    			i++;
    			j++;
    			next[i]=j;
    		}
    		else
    			j=next[j];
    	}
    }
    
    void get_next_new(string T,int *next)
    {//改进算法
    	int i,j;
    	i=1;
    	j=0;
    	next[1]=0;
    	while(i<T.length())
    	{
    		if(j==0 || T[i]==T[j])
    		{
    			i++;
    			j++;
    			if(T[i]!=T[j])
    				next[i]=j;
    			else
    				next[i]=next[j];
    		}
    		else
    			j=next[j];
    	}
    }
    
    int Index_KMP(string S,string T,int pos)
    {
    	int i=pos;
    	int j=1;
    	int next[255];
    	get_next(T,next);
    	while(i<=S.length() && j<=T.length()) 
    	{
    		if(j==0 || S[i]==S[j])
    		{
    			i++;
    			j++;
    		}
    		else
    			j=next[j];
    
    	}
    	if(j>T.length())
    		return i-T.length();
    	else
    		return 0;
    }
    
    int main()
    {
    	string S="abcdefgab";
    	string T="abcdex";
    	cout<<Index_KMP(S,T,1);
    	return 0;
    }

  • 相关阅读:
    Stone Game, Why are you always there? HDU
    SG函数
    A New Stone Game POJ
    卡特兰数
    找单词 HDU
    排列组合 HDU
    Harry And Magic Box HDU
    GCD and LCM HDU
    Co-prime HDU
    线段树——F
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687080.html
Copyright © 2011-2022 走看看