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
Sample Output
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"); } } }