题目:给定若干个电话号码,查询之中是否存在电话号码是另一个电话号码的前缀,存在的话视为冲突。
思路:字典树的基本操作。这道题让我注意到POJ之前没有注意到的一种Runtime Error可能,即不要在读取输入一半,找到结果的时候就直接return结束这个case的运算,这会导致后面的输入乱掉,而且最后输入溢出,导致程序停在那里等待输入,出现Runtime Error的错误。
import java.util.Scanner;
public class Main {
static Scanner in;
static Node head;
public static void main(String[] args) {
in = new Scanner(System.in);
int T = in.nextInt();
for(int testcase = 0; testcase < T; testcase++) {
head = new Node();
run();
}
in.close();
}
static void run() {
int N = in.nextInt();
boolean flag = false;
for(int i = 0; i < N; i++) {
String s = in.next();
int length = s.length();
char c[] = s.toCharArray();
Node cur = head;
for(int j = 0; j < length; j++) {
if(cur.next[c[j] - '0'] == null) {
cur.next[c[j] - '0'] = new Node();
if(j == length - 1) {
cur.next[c[j] - '0'].end = true;
}
} else if(cur.next[c[j] - '0'].end) {
flag = true;
break;
} else if(j == length - 1) {
flag = true;
break;
}
cur = cur.next[c[j] - '0'];
}
}
if(!flag)
System.out.println("YES");
else
System.out.println("NO");
}
static class Node {
Node next[] = new Node[10];
boolean end;
}
}