题目:http://acm.hdu.edu.cn/showproblem.php?pid=1671
没用字典树,思路很简单,用最小的长度去依次匹配前缀即可。时间还需优化,先上代码:
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(string a,string b){
return a.size()<b.size();
}
bool flag;
string buf[10001];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
scanf("%d",&n);
string tmp;
for(int i=0;i<n;i++){
cin>>buf[i];
}
sort(buf,buf+n,cmp);
flag=0;
for(int i=0;i<n-1;i++)
{
string shortest=buf[i];
int len=shortest.size();
for(int j=i+1;j<n;j++)
{
tmp=buf[j];
tmp=tmp.substr(0,len);
if(tmp==shortest){
flag=1;
break;
}
}
if(flag)break;
}
if(flag)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}