class Node{
public:
Node* a[26];
int pos;
int length;
Node():pos(-1), length(0){
for (int i = 0; i < 26; ++i) a[i] = nullptr;
}
};
class TireTree {
public:
TireTree() {
head = new Node();
}
~TireTree() {
deleteTree(head);
head = nullptr;
}
void deleteTree(Node* now) {
for (int i = 0; i < 26; ++i)
{
if (now->a[i] != nullptr)
{
deleteTree(now->a[i]);
}
}
delete now;
}
void update(Node* now, int x, int l) {
if (now->pos == -1 || l < now->length)
{
now->pos = x;
now->length = l;
}
}
void insert(string& s, int x) {
Node* now = head;
int l = s.size();
update(now, x, l);
for (int i = 0; i < s.size(); ++i)
{
if (now->a[s[i] - 'a'] == nullptr)
{
now->a[s[i] - 'a'] = new Node();
}
now = now->a[s[i] - 'a'];
update(now, x, l);
}
}
int search(string& s) {
Node* now = head;
int n = s.size(), rtn = now->pos;
for (int i = 0; i < n; ++i)
{
if (now->a[s[i] - 'a'] == nullptr)
{
break;
}
now = now->a[s[i] - 'a'];
rtn = now->pos;
}
return rtn;
}
public:
Node* head;
};
字典树模板
最新推荐文章于 2024-06-13 10:13:20 发布