首页 > 编程语言 >KMP算法

KMP算法

时间:2023-11-27 10:33:24浏览次数:36  
标签:return int pattern next texts 算法 KMP size

#include <iostream>

using namespace std;


int *getNext(string pattern){
    int *next= (int *)malloc(sizeof(int)* pattern.size());

    if( next == NULL ){
        return NULL;
    }

    next[0] = -1;

    int j = -1;
    for( int i = 1; i < pattern.size(); i++ ){

        while(j != -1 && pattern[ j + 1 ] != pattern[i]){
            j = next[j];
        }

        if(pattern[j + 1] == pattern[i]){
            j++;
        }

        next[i]= j;
    }

    return next;

}

int kmpsearch(string texts, string pattern){
    int j;

    int *next = getNext(pattern);
    if(next == NULL){
        return -1;
    }

    j = 0;
    for (int i = 0; i < texts.size(); i++){

        while( j > 0 && pattern[j] != texts[i]){
            j = next[j -1] + 1;
        }

        if(pattern[j] == texts[i]){
            j++;
        }

        if(j == pattern.size() - 1){
            return i - j + 1;
        }
    }

    return -1;

}
int main(){
    int i;
    i = kmpsearch("abababc", "baba");

    cout<<i<<endl;
    return 0;
}

 

标签:return,int,pattern,next,texts,算法,KMP,size
From: https://www.cnblogs.com/songhaibin/p/17858701.html

相关文章

  • 排序算法之冒泡排序1
    一概述在生活中,我们离不开排序。例如在学校站队时,会按照身高顺序进行排队。每一个月考或者期末的成绩都会按照成绩排名次。在编程学习中,我们也会经常遇到排序的问题。这种排序的场景非常多。例如在开发一个学生管理系统时,需要按照学号的顺序从小到大去排列。当开发一个电商平台时,需......
  • ISP算法简述-BLC
    BlackLevelCalibration,黑电平矫正现象1)在纯黑条件下拍张图,你会发现像素值不为02)或者你发现图像整体偏色这些问题可能是黑电平导致的。原因存在黑电平的原因有2个:1)sensor的电路本身存在暗电流。暗电流主要产生在光电信号转换过程中,光电二极管受温度,电压稳定性等因素的干......
  • 基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述        该算法主要由两个部分组成:HOG特征提取和GRNN神经网络。下面将详细介绍这两个部分的原理和数学公式。 1.HOG特征提取      HOG(HistogramofOrientedGradients)是......
  • 基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览      2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述3.1图像指数对比度增强概述     图像指数对比度增强是一种常见的图像处理方法,主要是通过改变图像的像素值来增强图像的对比度。具体来说,它通常通过将原始图像......
  • 活动安排 贪心算法
    会议(活动)安排如题:思路:贪心算法假设现在有五组数据1.将活动按照结束时间递增排序2.当前安排的活动的结束时间小于等于下一个活动的开始时间ps:如果两个活动的结束时间相同,选择开始时间较晚的a13,5a21,4a21,4a13,5a30,6a30,6a45,7a45,7a53,8......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现的代......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现......
  • 家长直呼太暴力!这些算法可能会被删除
    近日,洛谷网络科技有限公司多位用户家长向@kkksc03反映,部分算法存在血腥、暴力等不利于青少年儿童的因素出现,要求对相关算法进行整改或被删除。洛谷网络科技有限公司题目组管理员在接受采访时说道,在最近几天内,洛谷收到了数十条家长来信,声称网站教授的部分算法存在“血腥”、“暴......
  • 关于人工智能算法的深度思考(总结)
    1、神经元其实并不神奇,神奇的是它以某种相互联系的方式,可以在训练得到答案并核对答案后,立即对所走的路径上的权重进行更新(反向传播),更新的依据是答案误差大小,误差大则更新也大,误差小则更新就小。所走路径:所有单次训练被激活的神经元的组合。2、根据1,我们完全可以重新设计更好的神......
  • 高精度算法总结
    高精度加法题目链接:https://www.acwing.com/activity/content/problem/content/825/代码模版:1#include<iostream>2#include<vector>34usingnamespacestd;56//C=A+B7vector<int>add(vector<int>&A,vector<int>&......