add kmp algorithms