zoukankan      html  css  js  c++  java
  • KMP模式匹配算法

    <pre name="code" class="cpp">#include<iostream>
    #include<vector>
    #include<string.h>
    
    using namespace std;
    
    void get_next(vector<int>& next,const char* subStr)
    {
    	int length=next.size();
    	next[0]=-1;                    //next[0] = -1
    	int i=0,j=-1;
    	while(i<length-1)                     //i<length-1,为循环限制条件
    	{
    		if(j==-1 || subStr[i]==subStr[j])
    		{
    			next[++i] = ++j;           
    		} 
    		else
    			j = next[j];                 //数组适当进行回退
    	}
    }
    
    int kmpMatch(const char* str,const char* substr)
    {
    	int lengthS=strlen(str);
    	int length=strlen(substr);
    	
    	vector<int> next(length,0);
    	get_next(next,substr);
    	
    	int i=0;
    	int j=0;
    	while(i<lengthS && j<length)
    	{
    		if(j==-1 || str[i]==substr[j])//j==-1也是就回退到了子串的开头位置,则i,j都向前一步
    		{                              //假设主串和子串匹配,也须要向前一步
    			i++;
    			j++;
    		}
    		else
    		{
    			j=next[j];//假设未能匹配则回退到下一位置
    		}
    	}
    	if(j==length)//已经查找到子串的末尾
    		return i-length;
    	else
    		return 0;
    }
    
    int main()
    {
    	const char* str="abcababcabcabx";
    	const char* subStr="abcabx";
    	cout<<kmpMatch(str,subStr)<<endl;
    	return 0;
    }


    
       
    
  • 相关阅读:
    自娱自乐
    项目冲刺(2)-第二、第三天
    项目冲刺(2)-第一天
    Beta版本冲刺计划及安排
    第一章 构造过程抽象
    python 学习2
    python 学习1
    ionic 初入门
    NodeJS学习
    软件工程实践总结作业——个人作业
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7136106.html
Copyright © 2011-2022 走看看