• 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;
    }
  • 相关阅读:
    webpack基础理解以及使用搭建
    前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度
    react 什么是虚拟DOM?深入了解虚拟DOM
    react PropTypes 与 DefaultProps
    react todolist代码优化
    react 拆分组件于组件
    react 部分语法补充
    react 的安装和案列Todolist
    浏览器的标准模式和怪异模式
    软件测试基础——慕课网
  • 原文地址:https://www.cnblogs.com/fangexuxiehuihuang/p/14368036.html
Copyright © 2020-2023  润新知