Pagini recente » Cod sursa (job #69128) | Cod sursa (job #669235) | Cod sursa (job #2649783) | Cod sursa (job #2988041) | Cod sursa (job #1464019)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char text[2000001], pattern[2000001];
int n, m;
int lps[2000001];
void readInput() {
f>>pattern>>text;
m = strlen(text);
n = strlen(pattern);
}
void lpsCreation() {
lps[0] = 0;
for(int i = 1; i < n; i++){
if(pattern[i] == pattern [lps[i-1]])
lps[i] = lps[i-1] + 1;
else
lps[i] = 0;
}
}
void kmp() {
int i = 0, j = 0, occ = 0;
while(i < m) {
if(text[i] == pattern[j]) {
i++; j++;
if(j == n) {
occ++;
j = lps[j-1];
}
}
else {
if(j != 0) {
j = lps[j-1];
}
else {
i++;
}
}
}
g<<occ;
}
int main()
{
readInput();
lpsCreation();
kmp();
return 0;
}