第一届山东省ACM——Phone Number(java)

时间:2023-12-15 15:23:26

Description

We know that if a phone number A is another phone number B’s prefix, B is not able to be called. For an example, A is 123 while B is 12345, after pressing 123, we call A, and not able to call B.

Given N phone numbers, your task is to find whether there exits two numbers A and B that A is B’s prefix.

Input

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 phone numbers.

The last case is followed by a line containing one zero.

Output

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

Sample Input

2 012 012345 2 12 012345 0

Sample Output

NO YES

HINT

Source

山东第一届省赛

题目链接:http://acm.upc.edu.cn/problem.php?id=1928



字符串匹配(intdexOf(String str)),O(n2)

代码:

import java.util.Scanner;
public class Main{
public static String s[];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int len[];
while(sc.hasNextInt()){
int n=sc.nextInt();
if(n<=0)
break;
s=new String[n];
len=new int[n];
for(int i=0;i<n;i++){
s[i]=sc.next();
len[i]=s[i].length();
}
for(int i=0;i<n-1;i++){
int k=len[i];
int temp=i;int d=0;
String ss;
for(int j=i+1;j<n;j++){
if(k>len[j]){
k=len[j];
temp=j;
}
}
if(temp>i){
d=len[i];len[i]=len[temp];len[temp]=d;
ss=s[i];s[i]=s[temp];s[temp]=ss;
}
}
int ddd=0;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
int dd=s[j].indexOf(s[i]);
if(dd==0){
System.out.println("NO");
ddd=1;
break;
}
}
if(ddd==1)
break;
}
if(ddd==0)
System.out.println("YES");
}
}
}