static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
vector<int> next;
int strStr(string haystack, string needle) {
if (needle.length() <= 0)
return 0;
next = vector<int>(needle.length());
return kmp(haystack, needle);
// return haystack.find(needle);
}
void Next(string& subString) {
int j = 0;
int i = 1;
while(i < subString.length()) {
if (subString[i] == subString[j]) {
next[i] = j + 1;
j++;
i++;
}
else {
if (j != 0) {
j = next[j - 1];
}
else {
next[i] = 0;
i++;
}
}
}
}
int kmp(string& text, string& pattern) {
int j = 0;
int i = 0;
Next(pattern);
while (i < text.length() && j < pattern.length()) {
if (text[i] == pattern[j]) {
i++;
j++;
}
else {
if (j != 0)
j = next[j - 1];
else
i++;
}
}
if (j == pattern.length())
return i - j;
else
return -1;
}
};
LetCode 28. 实现strStr()
最新推荐文章于 2022-05-27 21:28:42 发布