This algorithm is a two step process.First we create a auxiliary array lps[] and then use this array for searching the
This algorithm is a two step process.First we create a auxiliary array lps[] and then use this array for searching the
pattern.
Preprocessing :
1. We pre-process the pattern and create an auxiliary array lps[] which is used to skip characters while
matching.
2. Here lps[] indicates longest proper prefix which is also suffix.A proper prefix is prefix in which whole string is
not included.For example, prefixes of string ABC are “ ”, “A”, “AB” and “ABC”. Proper prefixes are “ ”, “A” and
“AB”. Suffixes of the string are “ ”, “C”, “BC” and “ABC”.
Searching
1. We keep matching characters txt[i] and pat[j] and keep incrementing i and j while pat[j] and txt[i] keep
matching.
2. When we see a mismatch,we know that characters pat[0..j-1] match with txt[i-j+1…i-1].We also know that
lps[j-1] is count of characters of pat[0…j-1] that are both proper prefix and suffix.From this we can conclude
that we do not need to match these lps[j-1] characters with txt[i-j…i-1] because we know that these
characters will match anyway.
Implementaion in Java
Step by step
Solved in 2 steps with 3 images