Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
思路:字符串匹配,返回匹配成功的位置,一是暴力匹配,二是KMP算法。
暴力匹配
class Solution {
public:
int strStr(string haystack, string needle) {
int m = haystack.size();
int n = needle.size();
for(int i = 0; i <= m-n; i ++)
{
int j;
for(j = 0; j < n; j ++)
{
if(haystack[i+j] != needle[j])
break;
}
if(j == n)
return i;
}
return -1;
}
};
KMP算法
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle.empty()) return 0;
if(haystack.empty()) return -1;
vector<int> pi(needle.size(), 0);
//KMP-algorithm:
//Pre-process
int k = 0, i;
for(i = 1; i < needle.size(); i++) {
while(k > 0 && needle[k] != needle[i]) k = pi[k - 1];
if(needle[k] == needle[i]) pi[i] = ++k;
}
k = 0;
//Matching
for(i = 0; i < haystack.size(); i++) {
while(k > 0 && haystack[i] != needle[k]) k = pi[k - 1];
if(haystack[i] == needle[k]) k++;
if(k == needle.size()) return i - needle.size() + 1;
}
return -1;
}
};