前缀字符串

来源:互联网 发布:手机便签软件 编辑:程序博客网 时间:2024/04/28 17:37

Description

如果一个字符串s1是由另一个字符串s2的前面部分连续字符组成的,那么我们就说s1就是s2的前缀。比如“ac”是“acm”的前缀,“abcd”是“abcddfasf”的前缀,特别的“kdfa”是“kdfa”的前缀。现在给你一些字符串,你的任务就是从这些字符串中找出一些字符串放到一个集合中,使得这个集合中任意一个字符串不是其他字符串的前缀,并且要使集合里的字符串尽可能的多。输出这个集合中字符串的个数。

Input

有多组测试数据。每组测试数据以一个整数n开头,随后有n个字符串。当n=0时表示输入结束。0<100,字符串长度不大于20fieldset=""<="">

Output

每组测试数据输出一个整数,即所求的最大值。每组数据占一行。

Sample Input

6acmyuouyuoufsdafacmmmdfacmmfdsf0

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;
  
   }


}

0 0
原创粉丝点击