CY_

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

题目描述

We know thatif a phone number A is another phone number B’s prefix, B is not able to becalled. For an example, A is 123 while B is 12345, after pressing 123, we callA, and not able to call B.
Given N phone numbers, your task is to find whether there exits two numbers Aand B that A is B
sprefix.
 

输入

 The input consists of several test cases.
 The first line of input in each test case contains one integer N (0<N<1001),represent the number of phone numbers.
 The next line contains N integers, describing the phonenumbers.
 The last case is followed by a line containing one zero.

输出

 For each test case, if there exits a phone number thatcannot be called, print “NO”, otherwise print “YES” instead.

示例输入

2

012

012345

2

12

012345

0

示例输出

NO

YES

/*********************

N个字符串中如果有一个是另外一个的前缀,则输出NO,否则输出YES。

O(n^2)的循环,

*********************/

Code:

#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
    char  str[1005][1005];
    char s[1005];
    int n,i,j,li,lj;
    bool leaf;
    while(scanf("%d",&n)&&n)
    {
        leaf  = false;
        li = lj = 0;
        for(i = 0;i<n;i++)
            cin>>str[i];
        for(i = 0;i<n;i++)
        {
            li = strlen(str[i]);
            for(j = 0;j<n;j++)
            {
                lj = strlen(str[j]);
                if(i==j||li>lj)//自己不和自己比较,str[j] 长度比str[i]短的话肯定不是前缀。
                    continue;
                strncpy(s,str[j],li);
                s[li] = '\0';
                if(strcmp(s,str[i])==0)// 发现前缀则跳出循环
                {
                    leaf = true;
                    break;
                }
            }
            if(leaf)
                break;
        }
        if(leaf)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
}

posted on 2014-04-14 18:42  CY_  阅读(196)  评论(0编辑  收藏  举报