题意:求给定的多个串中是否存在,某个串是另一个串的前缀。
解题思路:使用Trie树。在每次插入一个串的同时判断。对于该问题,只存在以下两种情况:
1.当前插入的串的前缀是前面的某个串。对于这种情况,把前面插入的串的最后一个节点记为危险节点。那么在后面插入串的时候,如果经过危险节点,说明这种情况成立。
2.当前插入的串是前面某个串的前缀。对于这种情况,把插入串的最后一个节点单独拿出来判断,如果该串的最后一个节点已经被分配过地址,则说明这种情况成立。
这两个条件只要满足一个,即回答NO。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstring>
using namespace std;
struct Node
{
Node * child[10];
Node