Pagini recente » Cod sursa (job #1415477) | Cod sursa (job #232755) | Cod sursa (job #2791713) | Cod sursa (job #1354166) | Cod sursa (job #1605008)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string A, B, aux;
unsigned int lengthA, lengthB;
int pi[10005];
void prefix()
{
int i, q=0;
for( i=2, pi[1] = 0; i<=aux.size(); ++i )
{
while( q && aux[q+1] != aux[i] )
{
q = pi[q];
}
if( aux[q+1] == aux[i] )
{
++q;
}
pi[i] = q;
}
}
int main()
{
int poz, i, left, right, q = 0;
ifstream in("potrivire.in");
in >> lengthA >> lengthB >> A >> B;
in.close();
for (i = lengthA; i; i--){
A[i] = A[i-1];
}
A[0] = ' ';
prefix();
poz = B.find('*');
aux = B.substr(0,poz);
for (i = aux.size(); i; i--){
aux[i] = aux[i-1];
}
aux[0] = ' ';
for (i = 1; i <= lengthA; i++){
while (q && aux[q+1] != A[i]){
q = pi[q];
}
if (aux[q+1] == A[i]){
q++;
}
if (q == aux.size()-1){
q = pi[aux.size()-1];
left = i-aux.size()-1;
break;
}
}
cout<<left<<endl;
//
// ofstream out("potrivire.out");
// out<<prim<<" "<<ultim;
// out.close();
return 0;
}