Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Update (2014-11-02):
The signature of the function had been updated to return the index instead of the pointer. If you still see your function signature returns a char
*
or String
, please click the reload button to
reset your code definition.
思路:KMP模板题。
class Solution { public: void getNext(char *patten, vector<int> &next) { int i = 0, j = -1; int len = strlen(patten); next.resize(len+1); next[0] = -1; while (i < len) { if (j == -1 || patten[i] == patten[j]) { i++, j++; next[i] = j; } else j = next[j]; } } int strStr(char *haystack, char *needle) { if (haystack == NULL || needle == NULL) return -1; int i = 0, j = 0; int lena = strlen(haystack); int lenb = strlen(needle); vector<int> next; getNext(needle, next); while (i < lena && j < lenb) { if (j == -1 || haystack[i] == needle[j]) i++, j++; else j = next[j]; } if (j == lenb) return i - j; else return -1; } };
原文:http://blog.csdn.net/u011345136/article/details/43883393