博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP求前缀函数(next数组)
阅读量:4203 次
发布时间:2019-05-26

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

前缀函数主要是求出模式串中的next数组,那么什么是模式串呢?模式串模式串的概念很简单。举个例子:“给出一个字符串 T,再给出 n 个字符串 S1、S2...Sn,问 S1、S2...Sn 中有哪些是 T 的子串?”在这个例子中,S1、S2...Sn 便是 n 个模式串,T便是被匹配串。模式串是用来与被匹配串匹配的。
next数组的主要意义是
若模式串 P 的前 i 个字符组成的子串为S,那么S的前next[i]个字符’与‘S的后 next[i]个字符’相同。
如果理解了这个意思,那么这个前缀函数的模板就很好看懂了。
模板:
[cpp]   
  1. //T是被匹配的串。   
  2. //P是模式串。   
  3. //字符串都是从下标1开始的。   
  4. void COMPUTE_PREFIX_FUNCTION(char P[])   
  5. {   
  6.     int m=strlen(P+1); //这里是因为要从P[ 1 ]开始输入字符串的  
  7.     next[1]=0;   
  8.     for(int k=0,q=2;q<=m;q++)   
  9. //这段代码我感觉用通俗的语句说就是k是用来表示子串中前k个和后k个是相同的,q是用来遍历数组的需要  
  10.     {   
  11.         while(k>0&&P[k+1]!=P[q]) //如果P[k+1]和P[q]中字符不同说明匹配是失败,要把k的值重新退到next[ k ],直到两者相同才停止。这样做的好处是没必要再重新从头再来,节约时间。  
  12.             k=next[k];   
  13.         if(P[k+1]==P[q])   
  14.             k++;   
  15.         next[q]=k;   
  16.     }   
  17. }   

转载地址:http://gpali.baihongyu.com/

你可能感兴趣的文章
MySQL必知必会 -- 数据过滤
查看>>
MYSQL必知必会 -- 用通配符进行过滤
查看>>
MYSQL必知必会 -- 用正则表达式进行搜索
查看>>
MySQL必知必会 -- 创建计算字段
查看>>
MySQL必知必会 -- 使用数据处理函数
查看>>
MySQL必知必会 -- 数据汇总
查看>>
MySQL必知必会 -- 子查询的使用
查看>>
POJ 3087 解题报告
查看>>
POJ 2536 解题报告
查看>>
POJ 1154 解题报告
查看>>
POJ 1661 解题报告
查看>>
POJ 1101 解题报告
查看>>
ACM POJ catalogues[转载]
查看>>
ACM经历总结[转载]
查看>>
C/C++文件操作[转载]
查看>>
专业计划
查看>>
小米笔试:最大子数组乘积
查看>>
常见的排序算法
查看>>
5.PyTorch实现逻辑回归(二分类)
查看>>
6.PyTorch实现逻辑回归(多分类)
查看>>