原题:
解决方法:
很简单的一道题,但是如果你不是用KMP求解的,快去学习KMP并用KMP来解吧。KMP是字符串搜索的一个优化算法,比较难懂,但是非常实用,在很多有性能要求的地方需要用到。
代码:
Implement strStr().
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "hello", needle = "ll" Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba" Output: -1
解决方法:
很简单的一道题,但是如果你不是用KMP求解的,快去学习KMP并用KMP来解吧。KMP是字符串搜索的一个优化算法,比较难懂,但是非常实用,在很多有性能要求的地方需要用到。
代码:
int strStr(string haystack, string needle) {
if (needle.empty() || haystack == needle)
return 0;
int m = haystack.size(), n = needle.size();
vector<int> next(n, 0);
next[0] = -1;
int k = -1;
for(int i = 1; i < n; i++){
while(k > -1 && needle[k + 1] != needle[i])
k = next[k];
if (needle[k+1] == needle[i])
++k;
next[i] = k;
}
k = -1;
for(int i = 0; i < m; i++){
while(k > -1 && needle[k+1] != haystack[i])
k = next[k];
if (needle[k+1] == haystack[i])
++k;
if (k == n - 1)
return i - n + 1;
}
return -1;
}