Untitled
#include <bits/stdc++.h> using namespace std; const int A = 26; const int N = 4e5 + 9; int trie[N][A], freq[N]; int is_leaf[N]; int id = 1; // trie[node][j] is the index of the node you go to if you choose edge labelled with j void insert(const string& s) { int v = 0; for (int i = 0; i < (int)s.length(); i++) { int j = s[i] - 'a'; if (!trie[v][j]) { trie[v][j] = id++; } v = trie[v][j]; freq[v]++; } } void erase(const string& s) { // assume s is already in the trie int v = 0; for (int i = 0; i < (int)s.length(); i++) { int j = s[i] - 'a'; v = trie[v][j]; freq[v]--; } } bool query(const string& pref) { int v = 0; for (int i = 0; i < (int)pref.length(); i++) { int j = pref[i] - 'a'; if (freq[trie[v][j]]) v = trie[v][j]; else return false; } return true; } int main() { }
Leave a Comment