数据比较水,直接排序之后前后两个判断前面那个串是否后面串的子串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
static int cmp(const void *p1, const void *p2)
{
char *s1 = (char *) p1;
char *s2 = (char *) p2;
return strcmp(s1, s2);
}
int main()
{
int t, n;
char s[10000][11], temp[11];
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
while (getchar() != '\n')
;
int i;
for (i = 0; i < n; i++)
gets(s[i]);
qsort(s, n, sizeof(s[0]), cmp);
for (i = 0; i < n - 1; i++)
if (strlen(s[i]) <= strlen(s[i + 1]))
{
strcpy(temp, s[i + 1]);
temp[strlen(s[i])] = '\0';
if (!strcmp(s[i], temp))
break;
}
puts(i == n - 1 ? "YES" : "NO");
}
return 0;
}