牛客oj 习题4.7String Matching(KMP)&&习题4.6字符串匹配
练KMP我认为没什么技巧,背代码就完事了。我的口诀:(仅限于自己理解) (1)、先回溯主串后回溯子串,回溯哪个哪个为负一; (2)、推nextTable时拿子串对应的下标开刀。 PS:这题把nextTable数组换成next数组居然有歧义,这辣鸡编译器居然还会把next数组设成关键字,第一次碰到这种错害得我检查了一个小时,真是绝了。 #include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <climits> using namespace std; const int MAXN = 1000005; const int INF = INT_MAX; int nextTable[MAXN]; void getNext(string &text, string &pattern){ int n = text.size(); int m = pattern.size(); int i, j; j = 0; nextTable[j] = -1; i = nextTable[j]; while(j < m){ if(i == -1 || pattern[i] == pattern[j]){ i++; j+