Pagini recente » Cod sursa (job #701343) | Cod sursa (job #1810297) | Cod sursa (job #2737690) | Cod sursa (job #1494240) | Cod sursa (job #2931800)
#include <iostream>
#include <fstream>
#include <string.h>
#include <vector>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
///lps-longest prefix sufix
int pozMatch[1000];
int k;
int appeareance_Nr;
void computeLPSArray(string pat,int M,int *lps){
int len = 0; /// length of the previous prefix suffix;
lps[0] = 0; ///lps[0] is always 0
///now we compute lps[i] for i=1,m
int i = 1;
while(i < M){
if(pat[i] == pat[len]){
len++;
lps[i] = len;
i++;
}
else{
if(len != 0)
len = lps[len-1];
else
{
lps[i] = 0;
i++;
}
}
}
}
void KPMSearch(string pat,string txt){
int M = pat.length();
int N = txt.length();
int lps[M];
computeLPSArray(pat,M,lps);
int i = 0; ///index for txt[]
int j = 0;///index for pat[]
while( (N-i) >= (M-j) ){
if(pat[j] == txt[i]){
i++;j++;
}
if( j == M ){
pozMatch[k++] = i-j;
appeareance_Nr++;
j = lps[j-1];
}
else
if(i < N && pat[j] != txt[i])
if(j != 0){
j = lps[j-1];
}
else
i++;
}
}
int main()
{
string pat;
string txt;
fin>> pat;
fin>> txt;
cout<<pat<<endl<<txt;
KPMSearch(pat,txt);
cout<<endl<<"hehe";
cout<<endl<<appeareance_Nr;
fout<<appeareance_Nr<<"\n";
for(int i = 0;i < k; i++){
fout<< pozMatch[i]<<" ";
}
return 0;
}