博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP算法
阅读量:5236 次
发布时间:2019-06-14

本文共 766 字,大约阅读时间需要 2 分钟。

  • #include <iostream>   
  • #include <cstdlib>   
  • #include <cstdio>   
  • using namespace std;  
  •   
  • //这是整个kmp中最核心的地方   
  • int get_next(const char*t, int *next)  
  • {  
  •     int i = 0;  
  •     int j = -1; //设置j = -1,非常巧妙   
  •     int len = strlen(t);  
  •     memset(next,0, sizeof(int) * len);  
  •     next[0] = -1;  
  •     while(i < len - 1)  
  •     {  
  •         if(j == -1 || t[i] == t[j]) //前面的判断,j == -1, 非常巧妙   
  •         {  
  •             i++;  
  •             j++;  
  •             next[i] = j;    //将后面的next数组元素赋值   
  •         }  
  •         else  
  •             j = next[j];  
  •     }  
  • }  
  •   
  • int kmp(const char *s, const char *t)  
  • {  
  •     int i = 0;  
  •     int j = 0;  
  •     int next[100];  
  •     get_next(t,next);  
  •     while(i < strlen(s) && j < strlen(t))  
  •     {  
  •         if(j == - 1 || s[i] == t[j])    //如果j为-1,或者模式串和主串相等,两者继续往下比较   
  •         {  
  •             i++;  
  •             j++;  
  •         }  
  •         else  
  •             j = next[j];  
  •     }  
  •   
  •     if(j >= (int)strlen(t))  
  •     {  
  •         cout << "found " << endl;  
  •         return 0;  
  •     }  
  •   
  •     cout << "not found" <<endl;  
  •     return 0;  
  • }  

转载于:https://www.cnblogs.com/luzhongshan/p/3868376.html

你可能感兴趣的文章
C快速排序算法
查看>>
C# MVC中直接执行Js
查看>>
poj 2761 主席树的应用(查询区间第k小值)
查看>>
The Heaviest Non-decreasing Subsequence Problem
查看>>
delphi
查看>>
MySQL Workbench “Error Code: 1175” 的解决方法
查看>>
修改状态栏的颜色
查看>>
01.深入学习方法
查看>>
线程的2种实现方式
查看>>
Web渗透测试(xss漏洞)
查看>>
AFNetwork 作用和用法详解
查看>>
JSON简介
查看>>
HDOJ 1465 不容易系列之一 【错排公式 递推】
查看>>
html4
查看>>
javascript中,单引号是转义字符,就是让编辑器认为他后面的东西就是这个意思。...
查看>>
一次SSM项目记录
查看>>
算法与数据结构基础(一)排序基础1.选择排序
查看>>
【Leetcode_easy】832. Flipping an Image
查看>>
Codeforces712B【= =】
查看>>
[POI2008]砖块Klo
查看>>