前缀字符串

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


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值