Knuth Morris Prat algorithm[Pattern Matching]

prashantrmishra

Prashant Mishra

Posted on September 2, 2024

Knuth Morris Prat algorithm[Pattern Matching]

Knuth Morris Prat or KMP algorithm is one of the pattern matching algorithms, that helps find if a given pattern p is present in the given String s.
The time complexity of pattern matching is O(m+n) where m is the length of the pattern and n is the length of the given string

problem

class Solution {
    public int strStr(String haystack, String needle) {
        int n  = haystack.length();
        int m = needle.length();
        if(m > n) return -1; // if the needle length is more than the haystack length
        if(m ==0) return 0;// if the needle length if 0
        //using Knuth Morris Pratt pattern matching algorithm
        //tc : O(n+m) 
        //for understanding what KMP algo is refer this: https://www.youtube.com/watch?v=GTJr8OvyEVQ


        //step1: build fallback array by creating the pattern prefix and suffix match( for more details on this refer the link give above )
        int fallback[] = new int[m];
        int i = 0,j=i+1;
        while(i<m && j<m){
            if(needle.charAt(i) == needle.charAt(j)){
                fallback[j] = i+1;
                i++;j++;
            }
            else{
               if(i>0) i = fallback[i-1];
               else fallback[j++] = 0;
            }
        }

        // step2: use the fallback array for to search the needle in the haystack
        i=0;
        j=0;
        while(i<n && j<m){
            if(haystack.charAt(i) == needle.charAt(j)) {i++;j++; }
            else {
                if(j>0) j = fallback[j-1];
                else i++;
            }
        }
        return j == m ? i-j : -1; // j =m means we have found the needle at index i-j in the haystack
    }
}
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
prashantrmishra
Prashant Mishra

Posted on September 2, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Knuth Morris Prat algorithm[Pattern Matching]
patternmatching Knuth Morris Prat algorithm[Pattern Matching]

September 2, 2024