Description
Input
Output
Sample Input
2 3 911 97625999 91125426 5 113 12340 123440 12345 98346
Sample Output
NO YES
题目大意:
给出几组字符串,判断每组字符串中是否存在某一个字符串是另外一个字符串的前缀的情况,如果有,就输出NO;如果没有,就输出YES。
输入:第一行一个整数t(1<=t<=40),表示有多少组测试数据;接下来的t组数据中,每组数据的第一行是一个整数n(1<=n<=10000),表示该组的数据个数,接着n行每行一个字符串。
解题思路:
本题可以用字典树求解,但是我采用的是简单的查找。对每组数据,先按字典序对所以字符串排序,然后只需对比每两个相邻的字符串,判断它们是不是存在前缀关系即可。
代码如下:C/C++代码
#include<iostream> #include<stdio.h> #include<algorithm> #include<string> using namespace std; string s[10005]; //判断排序后的相邻的两个字符串是否是一个字符串是是另一个字符串的前缀 bool judge(int n) { int i,j,m; for(i=0;i<n-1;i++) { m=s[i].size(); for(j=0;j<m;j++) { if(s[i][j]!=s[i+1][j]) break; } if(j==m) return false; } return true; } int main() { int t,n,i; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) cin>>s[i];//只能用cin输入,而不能用scanf输入 //scanf("%s",&s[i]); sort(s,s+n);//按字典序排序 if(judge(n)) printf("YES\n"); else printf("NO\n"); } return 0; }
原文:http://blog.csdn.net/yanghuaqings/article/details/38435675