add KMP algo