●28. 实现 strStr()
题目描述
解题思路
方法1 BF算法
算法原理
算法代码
class Solution {
public:
int strStr(string haystack, string needle) {
int i = 0;
int j = 0;
while(i<haystack.size()&&j<needle.size())
{
if(haystack[i] == needle[j])
{
i++;
j++;
}
else
{
i = i-j+1;
j = 0;
}
}
if(j>=needle.size())return i -needle.size();
else return -1;
}
};
方法2 KMP算法
串的模式匹配算法,子串的定位运算称为串的模式匹配或串匹配
算法讲解:数据结构与算法基础(青岛大学-王卓)
主串和模式串
Kmp算法
设计思想:
主串S的指针i不必回溯。模式串的指针也不一定回溯到起始位置。
vector<int> getNext(const string& pattern) {
int m = pattern.size();
vector<int> next(m, 0);
for (int i = 1, j = 0; i < m; ++i) {
while (j > 0 && pattern[i] != pattern[j]) {
j = next[j - 1];
}
if (pattern[i] == pattern[j]) {
j++;
}
next[i] = j;
}
return next;
459. 重复的子字符串
题目描述
解决方法
这怎么是简单题???