Cod sursa(job #1804101)

Utilizator nick12nicolae mihalache nick12 Data 12 noiembrie 2016 11:16:22
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;
void kmp_search(const char *text,const char *pattern,int lenn)
{
    int *T;
    int i, j;
    const char *result = NULL;

    if (pattern[0] == '\0')
        return ;

    /* Construct the lookup table */
    T = (int*) malloc((strlen(pattern)+1) * sizeof(int) );
    T[0] = -1;
    for (i=0; pattern[i] != '\0'; i++) {
        T[i+1] = T[i] + 1;
        while (T[i+1] > 0 && pattern[i] != pattern[T[i+1]-1])
            T[i+1] = T[T[i+1]-1] + 1;
    }

    /* Perform the search */
    for (i=j=0; text[i] != '\0'; ) {
        if (j < 0 || text[i] == pattern[j]) {
            ++i, ++j;
            if (pattern[j] == '\0') {
                result = text+i-j;
                cout  << i - lenn<< " " <<endl;
              //  break;
            }
        }
        else j = T[j];
    }

   // free(T);
   // return i;
}

int ft_len(char *p)
{
    int i=0;
    while (p[i]!='\0')
        i++;
    return i;
}

int main()
{
   freopen("strmatch.in","r",stdin);
    freopen("strmatch.out","w",stdout);
    long long a,b;
    const char *p1,*p2;
    string pp,ppp;
    cin >> pp >> ppp;
p1 = pp.c_str();
p2 = ppp.c_str();

  kmp_search(p1,p2,strlen(p2));

    return 0;
}