给定 N 个电话号码,问是否有一个串是另一个的前缀。(trie的应用)
将它们排序之后依次两个两个做比较。
代码如下:
Source Code
Problem: 3630 User: softliumin
Memory: 276K Time: 188MS
Language: C++ Result: Accepted
Source Code
#include<iostream>
using namespace std;
int cases, count;
char tel[10005][11];
int i, j;
int cmp(const void *a, const void *b)
{
return strcmp( (char*)a,(char*)b );
}
int main()
{
scanf("%d",&cases);
while(cases--)
{
bool flag = true;
scanf("%d",&count);
for(i = 0; i < count; i++)
scanf("%s",tel[i]);
qsort(tel,count,sizeof(char)*11,cmp);
int len1, len2;
for(i = 1; i < count; i++)
{
len1 = strlen(tel[i-1]);
len2 = strlen(tel[i]);
j = 0;
if(len1 <= len2)
{
while(tel[i-1][j] == tel[i][j] && j < len1)
j++;
if(j == len1)
flag = false;
}
if(!flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
834

被折叠的 条评论
为什么被折叠?



