题目:
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
Clarification:
What should we return when needle
is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle
is an empty string. This is consistent to C's strstr() and Java's indexOf().
采用KMP算法:详见文章strstr的实现--KMP
class Solution {
public:
vector<int> getnext(string needle)
{
int n = needle.length();
vector<int> lps(n,0);
for(int i = 1,len = 0 ; i < n ;)
{
if(needle[i] == needle[len])
lps[i++] = ++len;
else if(len)
{
len = lps[len - 1];
}else
{
lps[i++] = 0;
}
}
return lps;
}
int strStr(string haystack, string needle) {
int n = needle.length();
if(n == 0)
{
return 0;
}
int h = haystack.length();
if(h == 0)
{
return -1;
}
vector<int> next = getnext(needle);
int i, j;
for(i = 0,j = 0; i < h ;)
{
if(haystack[i] == needle[j])
{
i++;
j++;
}
if(j == n)
return i - j;
if(i < h && haystack[i] != needle[j])
{
if(j > 0)
{
j = next[j -1];
}
else{
i++;
}
}
}
return -1;
}
};