一道水题,写了很长时间,还是太菜了,就一道暴力​​kmp​​​ 题解:
写一个暴力kmp,然后判断p串是否是回文串然后匹配就完事了

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
char s[maxn],p[maxn],s_1[maxn];//s是母串,p是匹配串
int ans;
bool judge(char*p)//判断p是否是回文串
{
int len=strlen(p)-1;
for(int i=0; i<=len; i++)
{
if(p[i]==p[len])
{
len--;
}
else
{
return false ;
}
}
return true;
}
void init()
{
int slen=strlen(s);
int k=0;
slen--;
for(int i=slen; i>=0; i--)
{
s_1[k++]=s[i];
}
}
void re_num(char *s,char *p)
{
int slen=strlen(s);
int plen=strlen(p);
int i=0,j=0;
while(i<slen)
{
if(s[i]==p[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
if(j==plen)
{
ans++;
}
}
}
//void re_innum(char *s,char *p)
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(p,0,sizeof(p));
memset(s,0,sizeof(s));
memset(s_1,0,sizeof(s_1));
scanf("%s %s",p,s);
ans=0;
if(!judge(p))
{
init();
re_num(s_1,p);
}
re_num(s,p);
printf("%d\n",ans);
}


}