求NEXT数组和KMP匹配的两种写法
注释掉的是我不喜欢的写法。
//计算串str的next数组
void getnext(char *str){
int len=strlen(str);
int j=,k=-;
next[]=-;
while(j<len){
if(k==-||str[j]==str[k]) next[++j]=++k;
else k=next[k];
}
} /*
void getnext(char *str){
int len=strlen(str);
next[0]=next[1]=0;
for(int i=1;i<len;i++){
int j=next[i];
while(j&&str[i]!=str[j]) j=next[j];//一直回溯j直到str[i]==str[j]或j减小到0
next[i+1]=str[i]==str[j]?j+1:0;//更新next[i+1]
}
}
*/ //返回串S中第一次出现串T的开始位置
int KMP(char *S,char *T){
int l1=strlen(S), l2=strlen(T);
int i=,j=;
while(i<l1){
if(j==-||S[i]==T[j])
i++, j++;
else j=next[j];
if(j==l2) return i-l2+;
}
return -;
} /*
int KMP(char *S,char *T){
int l1=strlen(S),l2=strlen(T);
int i=0,j=0;
for(int i=0;i<l1;i++){
while(j&&S[i]!=T[j]) j=next[j];
if(S[i]==T[j]) j++;
if(j==l2) return i-l2+1;
}
return -1;//若一直匹配不成功则返回-1
}
*/
求NEXT数组和KMP匹配的两种写法的更多相关文章
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- 求GCD(最大公约数)的两种方式
求GCD(最大公约数)的两种方式 这篇随笔讲解C++语言程序设计与应用中求GCD(最大公约数,下文使用GCD代替)的两种常用方式:更相减损法和辗转相除法,前提要求是具有小学数学的基本素养,知道GCD是 ...
- 运算符关键字。数据区别大小写。日期范围。判空的两种写法。NOT IN的两种写法。IN范围可含NULL,但NOT IN值范围不能含NULL。
比较:>,<,=,>=,<=,<>(!=) 逻辑:AND,OR,NOT 范围:BETWEEN...AND... 范围:IN,NOT IN 判空:IS NULL, I ...
- 快速排序partition过程常见的两种写法+快速排序非递归实现
这里不详细说明快速排序的原理,具体可参考here 快速排序主要是partition的过程,partition最常用有以下两种写法 第一种: int mypartition(vector<int& ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- EF架构~linq模拟left join的两种写法,性能差之千里!
回到目录 对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行j ...
- java 路径分隔符File.separator 以及 路径两种写法"/"和"\\"
一.File.separator File file=new File(); 这句是新建一个文件.file.separator这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单 ...
- iOS中表视图单元格事件用nib和storyboard的两种写法总结
从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理 ...
- linq和ef关于group by取最大值的两种写法
LINQ: var temp = from p in db.jj_Credentials group p by p.ProfessionID into g select new { g.Key, Ma ...
随机推荐
- Mysql 主从(转)
转自 http://blog.csdn.net/hguisu/article/details/7325124
- 如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
- 51nod 1562 玻璃切割 (set)
#include<stdio.h> #include<iostream> #include<set> using namespace std; typedef lo ...
- library not found for -lXXXXX 编译问题的解决方法
喜欢交朋友的加:微信号 dwjluck2013 编译和真机调试的时候都正常 在打包的时候遇到这个问题 解决方案:pod install 重新下载就解决了 分享给遇到同类问题的小伙伴
- Day2课后作业:三级菜单简单版
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, '谷歌':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{ ...
- 洛谷 P4362 [NOI2002]贪吃的九头龙
https://www.luogu.org/problemnew/show/P4362 首先有个很显然的dp:ans[i][j][k]表示i节点用j号头,i节点为根的子树中共有k个点用大头时i节点为根 ...
- .classpath文件的内容(MyEclipse通过添加External Jar生成)
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentr ...
- C#中MessageBox用法大全(附效果图)<转>
我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...
- vue项目打包后文本溢出代码消失问题
补充 https://www.cnblogs.com/richard1015/p/8526988.html vue webpack 打包编译-webkit-box-orient: vertical 后 ...
- C#操作Windows用户
首先需要引入System.DirectoryServices.dll using System; using System.Collections.Generic; using System.Dire ...