kmp的练习们
//poj3461 Oulipo
//kmp模板 统计子串在母串中的位置
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int next[];
char p[],s[];
int t,num,l1,l2; void get_next()
{
int j=;
int k=-;
next[]=-;
while(j<l2)
{
if(k==-||p[k]==p[j])
{
k++;
j++;
next[j]=k;
}
else
{
k=next[k];
}
}
} int kmp()
{
int i=;
int j=;
get_next();
while(i<l1)
{
if(j==-||p[j]==s[i])
{
j++;
i++;
}
else
{
j=next[j];
}
if(j==l2)
{
num++;
j=next[j];
}
}
return num;
} int main()
{
cin>>t;
while(t--)
{
num=;
cin>>p>>s;
l1=strlen(s);
l2=strlen(p);
cout<<kmp()<<endl;
}
}
//洛谷3375 字符串匹配
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int next[];
string p,s; void get_next(string p)
{
next[]=-;
int j=;
int k=-;
int l=p.length();
while(j<l)
{
if(k==-||p[j]==p[k])
{
j++;
k++;
next[j]=k;
}
else
{
k=next[k];
}
}
} void kmp(string s,string p)
{
get_next(p);
int i=,j=;
int l=s.length();
while(i<l)
{
if(j==-||p[j]==s[i])
{
i++;
j++;
}
else
{
j=next[j];
}
if(j==p.length())
{
printf("%d\n",i-p.length()+);
j=,i--;
}
}
for(int a=;a<=p.length();a++)
{
cout<<next[a]<<" ";
}
return;
} int main()
{
cin>>s>>p;
kmp(s,p);
}
kmp的练习们的更多相关文章
- KMP算法求解
// KMP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespac ...
- 简单有效的kmp算法
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...
- KMP算法
KMP算法是字符串模式匹配当中最经典的算法,原来大二学数据结构的有讲,但是当时只是记住了原理,但不知道代码实现,今天终于是完成了KMP的代码实现.原理KMP的原理其实很简单,给定一个字符串和一个模式串 ...
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- [KMP]【学习笔记】
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 36916 Accepted: 14904 Descript ...
- KMP算法实现
链接:http://blog.csdn.net/joylnwang/article/details/6778316 KMP算法是一种很经典的字符串匹配算法,链接中的讲解已经是很明确得了,自己按照其讲解 ...
- KMP专题
1.[HDU 3336]Count the string(KMP+dp) 题意:求给定字符串含前缀的数量,如输入字符串abab,前缀是a.ab.aba.abab,在原字符串中出现的次数分别是2.2.1 ...
- KMP学习之旅
说起kmp就要从字符串的匹配说起,下面我们谈谈字符串的匹配 给定一个原字符串:bababababababababb,再给定一个模式串:bababb,求模式串是否在源字符串中出现 最简单的方法就是遍历源 ...
- KMP模板
参考:http://www.cnblogs.com/c-cloud/p/3224788.html #include<stdio.h> #include<string.h> vo ...
- 【字符串匹配】KMP算法和next数组的c/c++实现
KMP算法基本思想有许多博客都写到了,写得也十分形象,不懂得可以参考下面的传送门,我就不解释基本思想了.本文主要给出KMP算法及next数组的计算方法(主要是很多网上的代码本人(相信应该是许多人吧)看 ...
随机推荐
- Linux mpstat-显示各个可用CPU的状态
更多linux 性能监测与优化 关注:linux命令大全 mpstat命令指令主要用于多CPU环境下,它显示各个可用CPU的状态系你想.这些信息存放在/proc/stat文件中.在多CPUs系统里,其 ...
- 利用 Python 批量修改文件名
开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干! 1 函数介绍 1.1 os 模块 (1)os.lisdir() >>> import os >>> ...
- Python初学者容易忽略的一些细节
1.Python中当让给变量1赋值上变量2的值时,变量1直接指向值在内存中存储的地址,即变量1存储的是变量2的值而不是指向变量 2."""的用法 1.多行注释 2.多行输 ...
- Python运算符(Python学习笔记03)
- 原生js实现三个按钮绑定三个计时器,点击其中一个按钮,开启当前计时器,另外另个不开启
今天在某个前端交流群,有个小伙伴问了一个小功能,自己想了一下,代码如下,可以实现基本功能: 下面是html结构 <div id="demo"> <input ty ...
- Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noau ...
- [HDU3586]Information Disturbing(DP + 二分)
传送门 题意:给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit 二分答案,再 DP,看看最终结果是 ...
- [BZOJ2843] 极地旅行社(LCT)
传送门 模板. ——代码 #include <cstdio> #include <iostream> #define N 300001 #define get(x) (son[ ...
- sql server internal book
Frequently Bought Together + + Total price: $131.71 Add all three to CartAdd all three to List Buy t ...
- SQLalchemy 查询总结
#简单查询 print(session.query(User).all()) print(session.query(User.name, User.fullname).all()) print(se ...