题目:给定若干个电话号码,查询之中是否存在电话号码是另一个电话号码的前缀,存在的话视为冲突。
思路:字典树的基本操作。这道题让我注意到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; } }