给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。

本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:

  • 数据0:小规模字符串,测试基本正确性;
  • 数据1:随机数据,String 长度为 10510^510​5​​,Pattern 长度为 101010;
  • 数据2:随机数据,String 长度为 10510^510​5​​,Pattern 长度为 10210^210​2​​;
  • 数据3:随机数据,String 长度为 10510^510​5​​,Pattern 长度为 10310^310​3​​;
  • 数据4:随机数据,String 长度为 10510^510​5​​,Pattern 长度为 10410^410​4​​;
  • 数据5:String 长度为 10610^610​6​​,Pattern 长度为 10510^510​5​​;测试尾字符不匹配的情形;
  • 数据6:String 长度为 10610^610​6​​,Pattern 长度为 10510^510​5​​;测试首字符不匹配的情形。

输入格式:

输入第一行给出 String,为由英文字母组成的、长度不超过 10610^610​6​​ 的字符串。第二行给出一个正整数 NNN(≤10\le 10≤10),为待匹配的模式串的个数。随后 NNN 行,每行给出一个 Pattern,为由英文字母组成的、长度不超过 10510^510​5​​ 的字符串。每个字符串都非空,以回车结束。

输出格式:

对每个 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算法实践题的更多相关文章

  1. 《数据结构》之串的模式匹配算法——KMP算法

    //串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstri ...

  2. 串的模式匹配算法 ------ KMP算法

    //KMP串的模式匹配算法 #include <stdio.h> #include <stdlib.h> #include <string.h> int* get_ ...

  3. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  4. 串的应用与kmp算法讲解--学习笔记

    串的应用与kmp算法讲解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象.同时希望可以帮到正在学习这方面知识的同学,可以相互学习.新手上路请多关照,如果问题还请不吝赐教. 2. 串的逻辑 ...

  5. Java数据结构之字符串模式匹配算法---KMP算法2

    直接接上篇上代码: //KMP算法 public class KMP { // 获取next数组的方法,根据给定的字符串求 public static int[] getNext(String sub ...

  6. Java数据结构之字符串模式匹配算法---KMP算法

    本文主要的思路都是参考http://kb.cnblogs.com/page/176818/ 如有冒犯请告知,多谢. 一.KMP算法 KMP算法可以在O(n+m)的时间数量级上完成串的模式匹配操作,其基 ...

  7. 串的模式匹配和KMP算法

    在对字符串的操作中,我们经常要用到子串的查找功能,我们称子串为模式串,模式串在主串中的查找过程我们成为模式匹配,KMP算法就是一个高效的模式匹配算法.KMP算法是蛮力算法的一种改进,下面我们先来介绍蛮 ...

  8. KMP算法实践与简单分析

    一.理解next数组 1.约定next[0]=-1,同时可以假想在sub串的最前面有一个通配符"*",能够任意匹配.对应实际的代码t<0时的处理情况. 2.next[j]可以 ...

  9. 串的模式匹配,KMP算法

    串的模式匹配 现考虑一个常用操作,在字符串s(我们称为主串)中的第pos开始处往后查找,看在主串s中有没有和子串p相匹配的的,如果有,则返回字串p第一次出现的位置. 暴力求解 int Index(ch ...

随机推荐

  1. 静态实现AOP(翻译自MSDN)

    在.net实现AOP 本文通过一个简单的例子实现静态AOP.改例子主要实现客户的增删改查,突然有一天你的老板需要在程序上跟踪每个方法操作的运行日志. 主要分为5个步骤. 第一步:创建接口IReposi ...

  2. PHP文件操作(三)-文件的写入

    fwrite()  //对文件进行写入 fwrite(file,string,length)file:必选项,需要写入的文件string:必选项,规定要写入文件的字符串length:可选项,规定要写入 ...

  3. angular结合echarts创建图表

    原理: 利用angularjs中的指令(directive)将echarts封装. 步骤: 1.封装函数: app.directive('line', function() { return { re ...

  4. 【转载】用原生JS和html5进行视频截图并保存到本地

    支持并尊重原创!原文地址:http://www.cnblogs.com/xieshuxin/p/6731637.html <!doctype html> <html> < ...

  5. 季逸超:90后IT少年的“盖茨梦”

    2月15日,"90后"独立开发者季逸超在其微博称,个人获得徐小平和红杉资本投资,成立了Peak Labs--以贝尔和施乐为目标的实验室. 谁是季逸超?他现年20岁,曾单独一人做出猛 ...

  6. Gym 101128 B Black Vienna

    题意 有A-Z 26张牌,现在从中抽出3张牌,并把剩下的23张牌分给选手1和2,现在有n次询问,每次询问一个选手是否有某两张牌,和选手的回答.回答说自己有这两张牌中的几张,问拿出的三张牌有多少种方案能 ...

  7. python中Dict与OrderedDict

    使用dict时,Key是无序的.在对dict做迭代时,我们无法确定Key的顺序. 如果要保持Key的顺序,可以用OrderedDict: from collections import Ordered ...

  8. struts2 与 spring 整合

    1. 首先把所有jar包导入工程 2.在struts2的核心配置文件(在src文件目录下)中添加如下配置: <!-- 将Struts的对象交给Spring管理 所以需要导入Spring和Stru ...

  9. Django开发——集成的子框架django.contrib

    Django开发——集成的子框架django.contrib 2018年09月11日 19:32:42 Mrkang1314 阅读数:63  https://blog.csdn.net/mashaok ...

  10. Oracle sql语句执行顺序(转)

    from: http://blog.csdn.net/lailai186/article/details/12612263 sql语法的分析是从右到左 一.sql语句的执行步骤:1)语法分析,分析语句 ...