http://acm.hdu.edu.cn/showproblem.php?pid=1671
判断字典中是否有某个字符串是另一个字符串的前缀,Trie Tree 解决。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100000 + 7;
int ch[MAXN][26];
int val[MAXN];
int sz = 1;
bool flag = false;
void insert_str(string str) {
int u = 0, c, tag = 0;
for(int i = 0; str[i]; ++i) {
c = str[i] - '0';
if(!ch[u][c]) {
ch[u][c] = sz++;
tag++;
} else if(val[ch[u][c]] != 0) {
flag = true;
}
u = ch[u][c];
}
if(!tag) flag = true;
val[u]++;
}
bool query_str(string str) {
int u = 0, c;
for(int i = 0; str[i]; ++i) {
c = str[i] - '0';
if(!ch[u][c]) {
return false;
}
u = ch[u][c];
}
return val[u] == 1;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string str;
int T;
cin >> T;
int n;
while(T--) {
flag = false;
sz = 1;
fill((int* )ch, (int*)ch + MAXN * 26, 0);
fill(val, val + MAXN, 0);
cin >> n;
//bool flag = false;
while(n--) {
cin >> str;
insert_str(str);
}
cout << (flag ? "NO" : "YES") << endl;
}
return 0;
}