intBF(string A, string B){ int n = A.size(); int m = B.size(); for(int i = 0; i <= n - m; ++i) { string temp = A.substr(i, m); if(temp == B) return i; } return-1; }
1 2 3 4 5 6 7 8 9 10 11
intBF(string A, string B){ int n = A.size(); int m = B.size(); // 滑动窗口 for(int i = 0; i <= n - m; ++i) { int j = 0; while (j < m && A[i + j] == B[j]) j++; if (j == m) return i; } return-1; }
vector<int> getNext(string s){ int n = (int)s.size(); vector<int> next(n+1); int k = -1; // preNext=-1; next[0] = -1; while(i < n){ while(k != -1 && s[i] != s[k]) k == next[k]; ++i;++k; if(s[i] == s[k]) next[i] = next[k]; else next[i] = k; } return next; }
intKMP(string A, string B){ int n = A.size(); int m = B.size(); vector<int> next = getNext(A); int i = 0,j = 0; while(i < n){ while(j != -1 && A[i] != B[j]) j = next[j]; ++i;++j; if(j >= m) return i - j; } return-1; }