pta字符串匹配算法比较c++代码
时间: 2024-10-29 13:06:31 浏览: 11
PTA字符串冒泡排序(C语言版)
pta(Pattern Tree Algorithm)是一种用于字符串模式匹配的高效算法,也被称为Trie树匹配或AC自动机(Aho-Corasick Automaton)。在C++中实现pta算法,可以创建一个基于字典树的数据结构来存储所有模式,并通过这个数据结构快速查找给定文本是否存在某个模式。
下面是一个简单的C++ PTA算法代码示例:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
class TrieNode {
public:
std::vector<int> children;
bool isEndOfWord;
TrieNode() : isEndOfWord(false) {}
};
void insert(TrieNode& root, const std::string& pattern) {
TrieNode* node = &root;
for (char ch : pattern) {
int index = ch - 'a';
if (node->children.size() <= index) {
node->children.resize(index + 1);
}
node = &node->children[index];
}
node->isEndOfWord = true;
}
bool search(const std::string& text, const std::vector<std::string>& patterns, TrieNode& root) {
TrieNode* curNode = &root;
for (char ch : text) {
int index = ch - 'a';
if (curNode->children.size() > index && curNode->children[index]) {
curNode = &curNode->children[index];
} else {
return false;
}
}
return curNode->isEndOfWord;
}
int main() {
TrieNode root;
std::vector<std::string> patterns = {"abc", "def"};
for (const auto& pattern : patterns) {
insert(root, pattern);
}
std::string text = "abcdef";
if (search(text, patterns, root)) {
std::cout << "Text matches one of the patterns." << std::endl;
} else {
std::cout << "Text does not match any patterns." << std::endl;
}
return 0;
}
```
在这个代码里,`insert`函数用于构建字典树,`search`函数则在文本中查找匹配的模式。
阅读全文