1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution { public:
void get_next(string needle,int *next) {
int i = 0,j = -1; next[0] = -1;
while (i < needle.size() - 1) {
if (j == -1 || needle[i] == needle[j]) {
++i; ++j; next[i] = j; } else j = next[j]; } }
int strStr(string haystack, string needle) {
if (needle.size() == 0) return 0; if (haystack.size() == 0) return -1;
int i = 0,j = 0;
int next[needle.size()]; get_next(needle,next);
int b = needle.size(); while (i < haystack.size() && j < b) {
if (j == -1 || haystack[i] == needle[j]) {
++i; ++j; } else j = next[j]; }
if (j == needle.size()) return i - j; else return -1; }
};
|