求解一道ACM题,希望高手指点一下。1
发布网友
发布时间:2023-10-14 00:10
我来回答
共3个回答
热心网友
时间:2024-11-26 19:44
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int P=110;
int fail[P];
int strfind(char str[],char key[],int sign[])
{
int count=0;
int l1,l2,i,j,flag;
l1=strlen(str);
l2=strlen(key);
for(i=0;i<=l1-l2;i++)
{
flag=1;
for(j=0;j<l2;j++)
if (str[i+j]!=key[j])
{
flag=0;
break;
}
if(flag)
sign[count++]=i;
}
return count;
}
int main()
{
char str[110],pat[15];
while(scanf("%s%s",str,pat)!=EOF)
{
int i,count=0,sign[P];
if(strfind(str,pat,sign)==0)
{
printf("Not Found\n");
continue;
}
for(i=0;i<strlen(str);i++)
{
if(i==sign[count])
{
printf("(%c",str[i]);
continue;
}
else if(i==sign[count]+strlen(pat)-1)
{
printf("%c)",str[i]);
count++;
continue;
}
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}
有什么问题可以Hi我哈
热心网友
时间:2024-11-26 19:44
这个要用到模式匹配的有关算法,如果求简单,就用BM,如果求效率,就用KMP,如果你够厉害,就用BM,BMH,BMHS追问能写具体代码么
追答这个,我也正在研究...嘿嘿,恕某不才!
热心网友
时间:2024-11-26 19:45
KMP算法来做就可以啦,够效率