博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kattis - String Matching(kmp)
阅读量:5280 次
发布时间:2019-06-14

本文共 1855 字,大约阅读时间需要 6 分钟。

String Matching

Input

The input consists of several test cases. Each test case consists of two lines, first a non-empty pattern, then a non-empty text. Input is terminated by end-of-file. The input file will not be larger than 5 Mb.

Output

For each test case, output one line containing the positions of all the occurences of pattern in text, from first to last, separated by a single space.

Sample Input 1 Sample Output 1
pPopupheloHello there!peek a booyou speek a bootiful languageanasbananananaspaj
2 457

题意

多组输入,每组两行,模式串和对比串,输出上面的模式串在下面的字符串中的所有位置下标,下标从0开始

思路1

KMP算法,套个模版就可以了

思路2

用string的find,str2.find(str1,x),关于这个函数的用法

代码1

#include
#include
using namespace std;int const MAXM = 4000000;char s[MAXM], t[MAXM];int next[MAXM], n;int shuchu[MAXM];void get_next(){ next[0] = -1; int i = 0, j = -1; while (t[i] != '\0') { if (j == -1 || t[i] == t[j]) { i++; j++; next[i] = j; } else j = next[j]; }}int KMP(){ get_next(); int i = 0, j = 0, ans = 0, len = strlen(t); while (s[i]) { if (j == -1 || s[i] == t[j]) { i++; j++; } else j = next[j]; if (j == len) { j = next[j]; shuchu[ans++] = i; } } return ans;}int main(){ while (gets(t)) { gets(s); int ss = KMP(); for (int i = 0; i < ss; i++) { if (i)printf(" "); printf("%d", shuchu[i]-strlen(t)); } puts(""); }}

代码2

#include
using namespace std;int main(){ string str1,str2; int cnt[100000]; while(getline(cin,str1)){ getline(cin,str2); int pos=0,x=0; while(str2.find(str1,x)!=-1&&x

 

转载于:https://www.cnblogs.com/zhien-aa/p/6284119.html

你可能感兴趣的文章
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
SWIFT国际资金清算系统
查看>>
站立会议第四天
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>