zoukankan      html  css  js  c++  java
  • KMP字符串模式匹配

    1.描述:指针i不回溯的字符串模式匹配算法

    #include <iostream>
    #include<cstring>
    using namespace std;
    
    /**
    名称:计算next数组函数
    描述:用于计算KMP模式匹配算法的next数组。该方法已得到修正,可以避免连续相同元素的问题
    编写人:李一帆
    时间:2021.2.3
    参数:patternString 模式串
    参数:nextArray next数组
    返回值:null
    **/
    void getNextArray(char* patternString,int* nextArray){
        int i=0;
        int j=-1;
        nextArray[0]=-1;
        while(i<strlen(patternString)){
            if(j==-1||patternString[i]==patternString[j]){
                i++;
                j++;
                if(patternString[i]!=patternString[j]) nextArray[i]=j;
                else nextArray[i] = nextArray[j];
            }else{
                j= nextArray[j];
            }
        }
    }
    
    /**
    名称:KMP模式匹配
    描述:用于字符串的模式匹配问题
    编写人:李一帆
    时间:2021.2.3
    参数:mainString 主串
    参数:patternString 模式串
    参数:nextArray next数组
    返回值:int -1:不匹配;其余:子模式的首下标
    **/
    int patternMathcingKMP(char* mainString,char* patternString,int* nextArray){
        int i = 0;
        int j = 0;
        while(i<strlen(mainString)&&j<strlen(patternString)){
            if(j==-1||mainString[i]==patternString[j]){
                i++;j++;
            }else{
                j = nextArray[j];
            }
        }
        if(j==strlen(patternString)){
            return i - j;
        }else{
            return -1;
        }
    }
    
    int main()
    {
        char* mainString = "ababcabcacbab";
        char* patternString = "abcac";
        int* nextArray =new int[100];
        getNextArray(patternString,nextArray);
        int pos = patternMathcingKMP(mainString,patternString,nextArray);
        cout<<pos;
        return 0;
    }
  • 相关阅读:
    贪婪算法、递归计算、动态规划背包问题
    递归、动态规划计算斐波那契数列
    用于确定两个字符串最长公共子串的函数
    快速排序算法
    顺序、二分查找文本数据
    MyBatis面试题
    Spring面试题
    SpringMvc面试题
    jsp和servlet面试
    EJB的理解
  • 原文地址:https://www.cnblogs.com/fangexuxiehuihuang/p/14368036.html
Copyright © 2011-2022 走看看