字典树(前缀树)

int trie[MAXN][26];
int color[MAXN];
int k = 1;

void insert(char *s) {
    int len = strlen(s);
    int p = 0;
    for(int i = 0; i < len; i++) {
        int c = s[i] - 'a';
        if(!trie[p][c]) {
            trie[p][c] = k;
            k++;
        }
        p = trie[p][c];
    }
    color[p] = 1;
}

int search(char *s) {
    int len = strlen(s);
    int p = 0;
    for(int i = 0; i < len; i++) {
        int c = s[i] - 'a';
        if(!trie[p][c]) return 0;
        p = trie[p][c];
    }
    return color[p] == 1;
}
上一篇:421. 数组中两个数的最大异或值(前缀树(Trie))


下一篇:【Ybtoj 第9章例2】最大异或对【Trie树】