POJ 3630 Trie

Posted Flowersea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3630 Trie相关的知识,希望对你有一定的参考价值。

链接:

http://poj.org/problem?id=3630

题意:

给你n个字符串,判断有没有字符串是其他字符串的前缀

题解:

建一个字典树,在插入的过程中,如果没有新建一个结点,那这个字符串肯定是其他字符串的前缀,

如果新建结点的时候发现,有的字符串以这个字符结尾,那肯定有字符串是这个字符串的前缀

代码:

31 int pi = 1;
32 int fg;
33 
34 struct Node {
35     int next[10];
36     bool end;
37 }tree[MAXN];
38 
39 void insert(string keyword) {
40     int index, p, i;
41     int flag = 0;
42     for (i = p = 0; keyword[i]; i++) {
43         index = keyword[i] - 0;
44         if (tree[p].next[index] == 0) {
45             tree[p].next[index] = pi++;
46             flag = 1;
47             if (tree[p].end) fg = 0;
48         }
49         p = tree[p].next[index];
50     }
51     if (!flag) fg = 0;
52     tree[p].end = 1;
53 }
54 
55 int main() {
56     int T;
57     cin >> T;
58     while (T--) {
59         pi = 1;
60         fg = 1;
61         memset(tree, 0, sizeof(tree));
62         int n;
63         cin >> n;
64         while (n--) {
65             string s;
66             cin >> s;
67             insert(s);
68         }
69         if (fg) cout << "YES" << endl;
70         else cout << "NO" << endl;
71     }
72     return 0;
73 }

 

以上是关于POJ 3630 Trie的主要内容,如果未能解决你的问题,请参考以下文章

Trie入门--Poj3630 Phone List

POJ3630——Phone List(Trie)

poj3630:Phone List——题解

POJ3630-Phone List-(字典树)

hdu杭电1671 / poj3630 字典树

POJ-3630-Phone List(字典树)