串的模式之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 ...
随机推荐
- 静态实现AOP(翻译自MSDN)
在.net实现AOP 本文通过一个简单的例子实现静态AOP.改例子主要实现客户的增删改查,突然有一天你的老板需要在程序上跟踪每个方法操作的运行日志. 主要分为5个步骤. 第一步:创建接口IReposi ...
- PHP文件操作(三)-文件的写入
fwrite() //对文件进行写入 fwrite(file,string,length)file:必选项,需要写入的文件string:必选项,规定要写入文件的字符串length:可选项,规定要写入 ...
- angular结合echarts创建图表
原理: 利用angularjs中的指令(directive)将echarts封装. 步骤: 1.封装函数: app.directive('line', function() { return { re ...
- 【转载】用原生JS和html5进行视频截图并保存到本地
支持并尊重原创!原文地址:http://www.cnblogs.com/xieshuxin/p/6731637.html <!doctype html> <html> < ...
- 季逸超:90后IT少年的“盖茨梦”
2月15日,"90后"独立开发者季逸超在其微博称,个人获得徐小平和红杉资本投资,成立了Peak Labs--以贝尔和施乐为目标的实验室. 谁是季逸超?他现年20岁,曾单独一人做出猛 ...
- Gym 101128 B Black Vienna
题意 有A-Z 26张牌,现在从中抽出3张牌,并把剩下的23张牌分给选手1和2,现在有n次询问,每次询问一个选手是否有某两张牌,和选手的回答.回答说自己有这两张牌中的几张,问拿出的三张牌有多少种方案能 ...
- python中Dict与OrderedDict
使用dict时,Key是无序的.在对dict做迭代时,我们无法确定Key的顺序. 如果要保持Key的顺序,可以用OrderedDict: from collections import Ordered ...
- struts2 与 spring 整合
1. 首先把所有jar包导入工程 2.在struts2的核心配置文件(在src文件目录下)中添加如下配置: <!-- 将Struts的对象交给Spring管理 所以需要导入Spring和Stru ...
- Django开发——集成的子框架django.contrib
Django开发——集成的子框架django.contrib 2018年09月11日 19:32:42 Mrkang1314 阅读数:63 https://blog.csdn.net/mashaok ...
- Oracle sql语句执行顺序(转)
from: http://blog.csdn.net/lailai186/article/details/12612263 sql语法的分析是从右到左 一.sql语句的执行步骤:1)语法分析,分析语句 ...