Description
如果一个字符串s1是由另一个字符串s2的前面部分连续字符组成的,那么我们就说s1就是s2的前缀。比如“ac”是“acm”的前缀,“abcd”是“abcddfasf”的前缀,特别的“kdfa”是“kdfa”的前缀。现在给你一些字符串,你的任务就是从这些字符串中找出一些字符串放到一个集合中,使得这个集合中任意一个字符串不是其他字符串的前缀,并且要使集合里的字符串尽可能的多。输出这个集合中字符串的个数。
Input
有多组测试数据。每组测试数据以一个整数n开头,随后有n个字符串。当n=0时表示输入结束。 0<100,字符串长度不大于20 fieldset="" <="">
Output
每组测试数据输出一个整数,即所求的最大值。每组数据占一行。
Sample Input
6 acm yuou yuoufsdaf acmmmdf acmm fdsf 0
Sample Output
3
</N<100,字符串长度不大于20>
#include <iostream>
#include<cstring>
using namespace std;
int main()
{
char s[100][20];
int n,i,j,k,count;
while(cin>>n&&n!=0)
{
count=0;
for(i=0;i<n;i++)
cin>>s[i];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==i) continue;
if(s[j][0]=='1') continue;
bool f=true;
int len=strlen(s[i]);
for(k=0;k<len;k++)
{
if(s[j][k]=='1') {f=false ;break;}
if(s[i][k]!=s[j][k]){f=false ;break;}
}
if(f)
s[i][0]='1';
}
}
for(i=0;i<n;i++)
if(s[i][0]!='1') count++;
cout<<count<<endl;
}
}