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()
最新推荐文章于 2023-08-02 13:59:40 发布
本文介绍了一种改进的字符串搜索算法——KMP算法,并提供了详细的C++实现代码。KMP算法通过预处理模式串来避免传统模式匹配中不必要的回溯,提高了搜索效率。
2361

被折叠的 条评论
为什么被折叠?



