Knuth-Morris-Pratt Algorithm (KMP)