kmp算法c++不用#include <vector>
时间: 2024-09-25 18:02:24 浏览: 33
当然可以,如果你不想使用`<vector>`,我们可以用数组代替。在C++中,失配指针数组通常会被存储在一个整数数组中,这里是一个不使用`<vector>`实现KMP算法的例子:
```cpp
#include <iostream>
#include <string>
// 功能:计算失配指针数组
int* getPartialMatchTable(const std::string &pattern, int* lps) {
int len = pattern.size();
lps[0] = 0;
for (int i = 1; i < len; ++i) {
int j = lps[i - 1];
while (j > 0 && pattern[i] != pattern[j]) {
j = lps[j - 1];
}
if (pattern[i] == pattern[j]) {
lps[i] = j + 1;
} else {
lps[i] = 0;
}
}
return lps;
}
// 主函数演示KMP搜索
void kmpSearch(const std::string &text, const std::string &pattern, int* lps) {
int index = 0;
int textIndex = 0;
while (index < pattern.size() && textIndex < text.size()) {
if (text[textIndex] == pattern[index]) {
index++;
textIndex++;
} else if (index > 0) {
index = lps[index - 1];
} else {
textIndex++;
}
}
if (index == pattern.size()) {
std::cout << "Pattern found at index " << textIndex - pattern.size() << std::endl;
} else {
std::cout << "Pattern not found." << std::endl;
}
}
int main() {
std::string text = "ABABCABAB";
std::string pattern = "ABCAB";
int lps[pattern.size()];
getPartialMatchTable(pattern, lps);
kmpSearch(text, pattern, lps);
return 0;
}
```
在这个版本中,我们手动创建了一个大小等于模式串长度的整数数组`lps`来存储失配指针。然后在`getPartialMatchTable`函数中更新这个数组。
阅读全文