简单的利用KMP算法进行比较,AC代码如下:
#include <iostream>
#define N 10006
using namespace std;
void SetNext(string s1,int next[],int size){
next[0] = -1;
int i = 0, j = -1;
while(i < size){
if(j == -1 || s1[i] == s1[j])next[++i] = ++j;
else j = next[j];
}
// for(int i = 0; i < size; i++)cout << "next[" << i << "] = " << next[i] << endl;
}
int KMP(string s1,string s2){
int sum = 0,i = 0,j = 0;
int length1 = s1.length(),length2 = s2.length();
int next[N];
SetNext(s1,next,length1);
while(i < length1 && j < length2){
if(i == -1 || s1[i] == s2[j]){
if(i == length1 - 1){
j++;
sum++;
i = 0;
}else{
i++;
j++;
}
}else{
i = next[i];
}
}
return sum;
}
int main(){
int n;
string s2,s1 = "2020";
while(cin >> n){
cin >> s2;
cout << KMP(s1,s2) << endl;
}
return 0;
}
京公网安备 11010502036488号