【模板】KMP

 int next[N];
char str1[M],str2[N];
//str1 长,str2 短
//len1,len2,对应str1,str2的长 void get_next(int len2)
{
int i = ,j = -;
next[] = -;
while(i<len2)
{
if(j == - || str2[i] == str2[j])
{
i++;
j++;
if(str2[i] != str2[j])
next[i] = j;
else
next[i] = next[j];
}
else
j = next[j];
}
//计算某字符串的周期,如aaaa是4,abcd是1
/*
int i = 0;j = -1;
next[0] = -1;
while(str2[i])
{
if(j == -1 || str2[i] == str2[j])
{
i++;j++;
next[i] = j;
}
else
j = next[j];
}
len = strlen(str);
i = len-j;
if(len%i==0)
return len/i;
else
return 1;
*/
} int kmp(int len1,int len2)
{
int i = ,j = ;
get_next(len2);
while(i<len1)
{
if(j == - || str1[i] == str2[j])
{
i++;
j++
}
else
j = next[j];
/*
if(j == len2)//计算str2在str1中出现多少次
{
cnt++;
j= next[j];
}
*/
}
//return j; //j为匹配的长度
if(j>len2)
return ;//这里也可以返回i-len2来获得匹配在主串中开始的位置
else
return ;
} //数字KMP
int a[],b[];
int next[],n,m; void getnext()
{
int i = ,j = -;
next[] = -;
while(i<m)
{
if(j == - || b[i] == b[j])
{
i++;
j++;
if(b[i] == b[j])
next[i] = next[j];
else
next[i] = j;
}
else
j = next[j];
}
} int kmp()//返回匹配位置
{
int i = ,j = ;
while(i<n)
{
if(a[i] == b[j])
{
if(j == m-)
return i-j+;
i++;
j++;
}
else
{
j = next[j];
if(j == -)
{
i++;
j = ;
}
}
}
return -;
}

模板 KMP的更多相关文章

  1. 算法模板——KMP字符串匹配

    功能:输入一个原串,再输入N个待匹配串,在待匹配串中找出全部原串的起始位置 原理:KMP算法,其实这个东西已经包含了AC自动机的思想(fail指针/数组),只不过适用于单模板匹配,不过值得一提的是在单 ...

  2. [模板]KMP算法

    昨天晚上一直在调KMP(模板传送门),因为先学了hash[关于hash的内容会在随后进行更(gu)新(gu)]于是想从1开始读...结果写出来之后一直死循环,最后我还是改回从0读入字符串了. [预先定 ...

  3. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

  4. P3375 模板 KMP字符串匹配

    P3375 [模板]KMP字符串匹配 来一道模板题,直接上代码. #include <bits/stdc++.h> using namespace std; typedef long lo ...

  5. [模板] KMP字符串匹配标准代码

    之前借鉴了某个模板的代码.我个人认为这份代码写得很好.值得一背. #include<bits/stdc++.h> using namespace std; const int N=1000 ...

  6. [模板]KMP字符串匹配

    洛谷P3375 注意:两次过程大致相同,故要熟读熟记,切勿搞混 可以看看其他的教程:http://www.cnblogs.com/c-cloud/p/3224788.html 本来就不太熟,若是在记不 ...

  7. [模板] KMP算法/Border

    KMP 算法 KMP (Knuth-Morris-Pratt) 算法是一种在线性时间内匹配文本串和模式串的算法. 称字符串的 Border 集合为 \[ \operatorname {Border} ...

  8. 算法竞赛模板 KMP

    KMP算法图解: ① 首先,字符串“BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索词“ABCDABD”的第一个字符,进行比较.因为B与A不匹配,所以搜索词后移一位. ② 因为B与A ...

  9. acm模板总结

    模板链接 字符串模板 KMP EXKMP Trie 可持久化Trie树+DFS序 01Trie Manacher 字符串哈希 2019上海网络赛G题 17 SA(后缀数组)  最大不重叠相似子串 求两 ...

随机推荐

  1. CF 55D. Beautiful numbers(数位DP)

    题目链接 这题,没想出来,根本没想到用最小公倍数来更新,一直想状态压缩,不过余数什么的根本存不下,看的von学长的blog,比着写了写,就是模版改改,不过状态转移构造不出,怎么着,都做不出来. #in ...

  2. XCode编译文件过多导致内存吃紧解决方法

    XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧

  3. Jquery_jquery中attr和prop的区别

    在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: ...

  4. Equal Sum Sets

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49406 题意: 输入n,k,s,求在不小于n的数中找出k个不同的数 ...

  5. Android带侧滑菜单和ToolBar的BaseActivity

    写Android的时候,可能有多个界面.在风格统一的软件中,写Activity时会有很多重复.例如我所在软工课程小组的项目:Github链接 ,里面的TaskListActivity和TeacherL ...

  6. butterknife简介及Generate ButterKnife Injections 不出现的问题解决

    一.概述 butterknife是一款as的功能强大插件.有了它,你几乎可以和findViewById说byebye了. 二.使用 github地址:https://github.com/avast/ ...

  7. Odoo Website 替换 Summernote 为第三方富文本编辑器

    随着用odoo的人越来越多,奇葩的需求也是越来越多.... 这不,有同学就想替换掉website forum里边的summernote控件,花了点时间研究了一下,先说结论:替换是可行的. 先上替换之后 ...

  8. mysql主从复制过滤

    主从复制过滤: 配置文件中的[mysqld]块中: master:(考虑到即时点还原一般不在主过滤) binlog_do_db= #数据库白名单 binlog_ignore_db= #数据库白名单 s ...

  9. java UDP 简单实现编程

    http://kuchaguangjie.iteye.com/blog/911145 http://blog.csdn.net/pengchua/article/details/4398972 htt ...

  10. MAC地址与IP地址的区别

    介绍一下MAC地址的知识,MAC地址和IP地址的区别以及MAC地址在实际应用中所涉及到的安全问题. 一.基础知识 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来 ...