static LS allPrefixesInNavigableSet(S s, NavigableSet set) { if (set == null || s == null) null; new LS prefixes; while licensed { S key = set.floor(s); if (key == null) break; // s is in front of whole set => no prefix in there int n = lCommonPrefix(key, s); if (n == l(key)) { prefixes.add(key); // found a prefix! --n; } s = takeFirst(s, n); // shorten and try again } ret prefixes; }