Description 给定一个源串s和n个子串stri。判断stri是否是s的子串。 Input
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- m0_58783937 2021-06-08 12:04关注
#include<stdio.h>
#include<string.h>
# define MAXSTRLEN 100000
typedef unsigned char SString [MAXSTRLEN+1];
int Nextval[100000];
void get_Nextval(SString T,int Nextval[ ])
{
int i=1,j=0;
Nextval[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j]){
++i;++j;
if(T[i]!=T[j])Nextval[i]=j;
else Nextval[i]=Nextval[j];
}//if
else j=Nextval[j];
}//while
}//get_nextval
int KMP(SString S,SString T)
{
int i=1,j=1;
while(i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j]){++i;++j;}
else j=Nextval[j]; //回溯j指针
}
if(j>T[0]) return i-T[0];
else return 0;
}
void init(SString T,char t[ ])
{
int x,i;
x=strlen(t);
for(i=1;i<=x;i++)
{
T[i]=t[i-1];
}
T[0]=x;
}
int main()
{
SString T,S;
char t[100000],s[100000];
int n,x,y,i,j,m;
while(scanf("%s",s)!=EOF){
getchar();
init(S,s);//初始化T数组
scanf("%d",&n);
for(m=0;m<n;m++)
{ scanf("%s",t);getchar();
init(T,t); //初始化T数组
get_Nextval(T,Nextval);//获取nextval数组
j=KMP(S,T);
if(j) printf("yes\n");
else printf("no\n");
}//for
}//while
return 0;
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 像这种代码要怎么跑起来?
- ¥15 怎么改成循环输入删除(语言-c语言)
- ¥15 安卓C读取/dev/fastpipe屏幕像素数据
- ¥15 pyqt5tools安装失败
- ¥15 mmdetection
- ¥15 nginx代理报502的错误
- ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
- ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
- ¥100 描述一下元器件的基本功能,pcba板的基本原理
- ¥15 STM32无法向设备写入固件