!7 p { new TreeSet set; set.add("pot"); set.add("potash"); System.out.println(containsPrefixOf(set, "pot")); } sbool containsPrefixOf(TreeSet set, S s) { if (set == null || s == null) false; while true { S key = set.floor(s); if (key == null) false; // s is in front of whole set => no prefix in there int n = lengthOfCommonPrefix(key, s); if (n == key.length()) return true; // found! s = s.substring(0, n); // shorten and try again } } static int lengthOfCommonPrefix(String a, String b) { int i = 0, n = Math.min(a.length(), b.length()); while (i < n && a.charAt(i) == b.charAt(i)) ++i; return i; }