串的模式之kmp算法实践题
给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。
本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据0:小规模字符串,测试基本正确性;
- 数据1:随机数据,String 长度为 10510^5105,Pattern 长度为 101010;
- 数据2:随机数据,String 长度为 10510^5105,Pattern 长度为 10210^2102;
- 数据3:随机数据,String 长度为 10510^5105,Pattern 长度为 10310^3103;
- 数据4:随机数据,String 长度为 10510^5105,Pattern 长度为 10410^4104;
- 数据5:String 长度为 10610^6106,Pattern 长度为 10510^5105;测试尾字符不匹配的情形;
- 数据6:String 长度为 10610^6106,Pattern 长度为 10510^5105;测试首字符不匹配的情形。
输入格式:
输入第一行给出 String,为由英文字母组成的、长度不超过 10610^6106 的字符串。第二行给出一个正整数 NNN(≤10\le 10≤10),为待匹配的模式串的个数。随后 NNN 行,每行给出一个 Pattern,为由英文字母组成的、长度不超过 10510^5105 的字符串。每个字符串都非空,以回车结束。
输出格式:
对每个 Pattern,按照题面要求输出匹配结果。
输入样例:
abcabcabcabcacabxy
abcabcacab
cabcabcd
abcabcabcabcacabxyz
输出样例:
abcabcacabxy
Not Found
Not Found
解题思路:看到这道题无疑就是用kmp算法;下面的代码就是kmp算法的模板➕用一个ans记录它是否找到;
具体的kmp算法思想在我前面的博客有:链接如下:
https://www.cnblogs.com/yewanting/p/10674340.html
代码如下:
#include<iostream>
#include<stdio.h>
using namespace std; int next1[];
void getnext(string t ,int tsize)
{
int k = - ;
int j = ;
next1[] = -;
while(j<tsize-)
{
if(k==-||t[j] == t[k])
{
++j;
++k;
next1[j] = k;
}else
k = next1[k]; }
} int kmp(string s ,string t ,int ssize,int tsize)
{
int i = ;
int j = ;
while(i<ssize&&j<tsize)
{
if(j==-||s[i]==t[j])
{
i++;
j++;
}else
{
j = next1[j];
}
}
if(j==tsize)
{
return i-j+;
}else
return -;
}
string s ;
string t ;
int n ;
int ssize;
int tsize;
int ans ;
int main()
{
cin>>s;
cin>>n;
ssize = s.size();
while(n--)
{
cin>>t;
tsize = t.size();
getnext(t,tsize);
ans = kmp(s,t,ssize,tsize); //用一个ans来记录是否找到匹配
if(ans==-) //若找不到
{
printf("Not Found\n");
}else //找到,则输出后面的字符;
{
for(int i = ans- ;i < ssize; i++)
{
cout<<s[i];
}
cout<<endl;
} }
return ;
}
串的模式之kmp算法实践题的更多相关文章
- 《数据结构》之串的模式匹配算法——KMP算法
//串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstri ...
- 串的模式匹配算法 ------ KMP算法
//KMP串的模式匹配算法 #include <stdio.h> #include <stdlib.h> #include <string.h> int* get_ ...
- hdu 1711 KMP算法模板题
题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...
- 串的应用与kmp算法讲解--学习笔记
串的应用与kmp算法讲解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象.同时希望可以帮到正在学习这方面知识的同学,可以相互学习.新手上路请多关照,如果问题还请不吝赐教. 2. 串的逻辑 ...
- Java数据结构之字符串模式匹配算法---KMP算法2
直接接上篇上代码: //KMP算法 public class KMP { // 获取next数组的方法,根据给定的字符串求 public static int[] getNext(String sub ...
- Java数据结构之字符串模式匹配算法---KMP算法
本文主要的思路都是参考http://kb.cnblogs.com/page/176818/ 如有冒犯请告知,多谢. 一.KMP算法 KMP算法可以在O(n+m)的时间数量级上完成串的模式匹配操作,其基 ...
- 串的模式匹配和KMP算法
在对字符串的操作中,我们经常要用到子串的查找功能,我们称子串为模式串,模式串在主串中的查找过程我们成为模式匹配,KMP算法就是一个高效的模式匹配算法.KMP算法是蛮力算法的一种改进,下面我们先来介绍蛮 ...
- KMP算法实践与简单分析
一.理解next数组 1.约定next[0]=-1,同时可以假想在sub串的最前面有一个通配符"*",能够任意匹配.对应实际的代码t<0时的处理情况. 2.next[j]可以 ...
- 串的模式匹配,KMP算法
串的模式匹配 现考虑一个常用操作,在字符串s(我们称为主串)中的第pos开始处往后查找,看在主串s中有没有和子串p相匹配的的,如果有,则返回字串p第一次出现的位置. 暴力求解 int Index(ch ...
随机推荐
- Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)
一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...
- C Primer Plus学习笔记(十)- 字符串和字符串函数
getchar() 和 putchar() getchar() 函数不带任何参数,它从输入队列中返回下一个字符 下面的语句读取下一个字符输入,并把该字符的值赋给变量 ch ch =getchar(); ...
- ubuntu16.04 双网卡绑定
ubuntu 16.04 双网卡绑定仅仅需要配置/etc/network/interfaces 添加标记内容即可 apt-get install ifenslave 默认已经安装
- srvctl和crs_start命令无法启动oracle RAC实例, 但sqlplus可以启动
今天遇到一个奇怪问题,发现srvctl和crs_start命令无法启动Oracle RAC实例,但用sqlplus却可以正常启动.最终发现原因是在OCR中数据库的状态变成了disable,将此状态更改 ...
- Mybatis系列(四)映射文件
转自:https://blog.csdn.net/chris_mao/article/details/48811507 Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方.实现相同的 ...
- BurpSuite系列(九)----Comparer模块(比较器)
一.简介 Burp Comparer在Burp Suite中主要提供一个可视化的差异比对功能,来对比分析两次数据之间的区别.使用中的场景可能是: 1.枚举用户名过程中,对比分析登陆成功和失败时,服务器 ...
- AMFObject 数据格式浅析
amf.h中关于 AMFObject 是这样的定义的: typedef struct AMFObject { int o_num; struct AMFObjectProperty *o_props; ...
- Oracle 环境下 GoldenGate 集成抽取(Integrated Capture)模式与传统抽取模式(Classic Capture)间的切换
检查抽取进程模式 在 GGSCI 环境下,执行类似如下语句查看特定进程的状态. GGSCI> info <Group_Name> 其中,<Group_Name> 为进程名 ...
- Zookeeper Api(java)入门与应用
如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...
- 公共技术点之 Java 反射 Reflection
本文摘录地址: http://codekk.com/open-source-project-analysis/detail/Android/Mr.Simple/%E5%85%AC%E5%85%B1%E ...