Search
 
SCRIPT & CODE EXAMPLE
 

CPP

kmp c++

#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    string l;
    string s;
    cin >> l;
    cin >> s;
    vector<long long>v(s.size(),0);
    int i, j;
    i = 0;
    j = 0;

    for (int i = 0; i < s.size(); i++) {
        i++;
        if (s[j] == s[i]) {
            v[i] = v[i - 1] + 1;
            j++;
        }
        else {
            if (j == 0) {
                j = v[j ];
            }
            else {
                j = v[j - 1];
            }
        }
    }
    j = 0;
    for (int i = 0; i < l.size(); i++) {
        if (l[i] == s[j]) {
            j++;
            if (j = s.size()) {
                cout << "start= " << i - s.size() << " end= " << i ;
                i = l.size();
            }

        }
        else {
            if (j == 0) {
                j = 0;
            }
            else {
                j = v[j - 1];
            }
        }
    }
}
Comment

kmp algorithm c++

#define ll long long int
#define vll vector<long long int>

ll kmp(string s)
{
    ll n = s.size();
    vll lps(n, 0); // longest prefix suffix
    for (ll i = 1; i < n; i++)
    {
        ll j = lps[i - 1];
        while (j > 0 && s[i] != s[j])
        {
            j = lps[j - 1];
        }
        if (s[i] == s[j])
        {
            j++;
        }
        lps[i] = j;
    }
    return lps[n - 1];
}
Comment

kmp c++

void computeLPSArray(char* pat, int M, int* lps)
{
    int len = 0;
    lps[0] = 0;
    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++;
            }
        }
    }
}
int matchFound=0;
void KMPSearch(char* pat, char* txt)
{
    matchFound=0;
    int M = strlen(pat);
    int N = strlen(txt);
    int lps[M];
    computeLPSArray(pat, M, lps);
    int i = 0;
    int j = 0;
    while (i < N) {
        if (pat[j] == txt[i]) {
            j++;
            i++;
        }
        if (j == M) {
            matchFound++;
//            printf("Found pattern at index %d ", i - j);
            j = lps[j - 1];
        }
        else if (i < N && pat[j] != txt[i]) {
            if (j != 0)
                j = lps[j - 1];
            else
                i = i + 1;
        }
    }
}
Comment

PREVIOUS NEXT
Code Example
Cpp :: unordered_map in c++ 
Cpp :: data type c++ 
Cpp :: c++ segmentation fault 
Cpp :: map of maps c++ 
Cpp :: how to compile c++ code with g+ 
Cpp :: char input in c++ 
Cpp :: bit masking tricks 
Cpp :: array bubble sort c++ static 
Cpp :: how atan work c++ 
Cpp :: function for reversing an array c++ stl 
Cpp :: css window id 
Cpp :: how to scan vector in c++ 
Cpp :: check if a string is a prefix of another c++ 
Cpp :: how to create windows warning message c++ 
Cpp :: kadane algo 
Cpp :: c++ optimize big int array 
Cpp :: c++ stack 
Cpp :: std::is_standard_layout 
Cpp :: A Subtask Problem codechef solution in cpp 
Cpp :: TCA9548 I2CScanner Arduino 
Cpp :: c++ program that put a space in between characters 
Cpp :: start google 
Cpp :: estimateaffine3d example c++ 
Cpp :: C++ singleton prevent copy 
Cpp :: punteros a arrays 
Cpp :: how to move your chrector in unity 
Cpp :: huffman encoding in c++ 
Cpp :: high school hacking competition 
Cpp :: labs c++ 
Cpp :: c++ to c converter online 
ADD CONTENT
Topic
Content
Source link
Name
3+9 =