传送门:戳我
题目大意:给一个字符串,再给一个标准穿,求标准串在给定字符串中出现的次数(不能重叠)
思路:一开始用的暴力TLE了,改成KMP,又TLE了……但是看见别人的暴力过了,简直不能忍,查了一会儿问题才发现暴力用的cin读入数据,由于数据量较大,超时了。。。
那么为什么KMP超时呢……因为这道题的数据规模并不大,用KMP较大的常数带来的复杂度可能比优化掉的复杂度还要多,所以TLE了……这个故事告诉我们,水题就不要想太多……
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char c[1000000+50],index[5+3];
int main(){
int t;
scanf("%d",&t);
while (t--){
scanf("%s %s",c,index);
//cout<<c<<" "<<index;
int p=0;
int ans=0;
int len1=strlen(c),len2=strlen(index);
while (p<len1-len2+1){
if (p+len2<=len1 && c[p]==index[0]){
int flag=0;
for (int i=0;i<len2;i++){
if (c[p+i]==index[i]) continue;
flag=1;
break;
}
if (flag==0){
ans++;
p+=len2-1;
}
}
p++;
}
printf("%d\n",ans);
}
}