kmp algo c++