首页 技术 正文
技术 2022年11月15日
0 收藏 434 点赞 4,951 浏览 1028 个字

2297: KMP模式匹配 三(串)

时间限制: 1 Sec  内存限制: 128 MB

提交: 25  解决: 16

[提交][状态][讨论版]
[Edit] [TestData]

题目描述

输入一个主串和一个子串,若匹配成功,则找出匹配的趟数和在子串在主串中的位置,若匹配不成功,则输出0

输入

输入两个字符串

输出

输出匹配的趟数和位置

样例输入

ababcabcacbab
abcac

样例输出

3 6

迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方…

#include <stdio.h>
#include <string.h>
#define SizeMax 105
typedef struct
{
char data[SizeMax];
int length;
} SqString;
void getnext(SqString s,int next[])
{
int j=0,k=-1;
next[0]=-1;
while(j<s.length-1)
{
if(k==-1||s.data[j]==s.data[k])
j++,k++,next[j]=k;
else k=next[k];
}
}
void StrAssign(SqString &s,char cstr[])
{
int i;
for(i=0; i<(int)strlen(cstr); i++)
s.data[i]=cstr[i];
s.length=i;
}
int kmp(SqString s,SqString t,int next[],int &ci)
{
int i=0,j=0;
while(i<s.length&&j<t.length)
{
if(j==-1||s.data[i]==t.data[j]) //主串与模式串对应字符匹配成功
{
i++;
j++;
}
else j=next[j],ci++; //模式串指针回溯
}
if(j>=t.length)return i-t.length+1;
else return 0;
}
int main()
{
SqString s,t;
int next[SizeMax]= {-1},ci=1;
char c[SizeMax],d[SizeMax];
gets(c);
gets(d);
StrAssign(s,c); //建立串
StrAssign(t,d);
getnext(t,next); //得到next值
int k=kmp(s,t,next,ci); //solve
printf("%d %d\n",ci,k);
return 0;
}
/*
acabaabaabcacaabc
abaabcac
4 6
*/

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,493
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297