Untitled

 avatar
unknown
c_cpp
a month ago
821 B
4
Indexable
#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