import java.util.*;
import java.util.stream.*;
import java.util.function.*;
class Ideone {
public static void main
(String[] args
) { String[] input
= "chat, ever, snapchat, snap, salesperson, per, person, sales, son, whatsoever, what, so".
split(", "); }
Set
<String
> words
= new LinkedHashSet
<>(Arrays.
asList(array
)); Set<String> otherWords = new HashSet<>(words);
for (Iterator<String> i = words.iterator(); i.hasNext(); ) {
otherWords.remove(next);
if (isCompound(next, otherWords)) {
i.remove();
} else {
otherWords.add(next);
}
}
return words.
stream().
toArray(String[]::new); }
private static boolean isCompound
(String string, Set
<String
> otherWords
) { if (otherWords.contains(string)) {
return true;
}
for (String word
: otherWords
) { if (string.startsWith(word)) {
return isCompound(string.replaceAll("^" + word, ""), otherWords);
}
if (string.endsWith(word)) {
return isCompound(string.replaceAll(word + "$", ""), otherWords);
}
}
return false;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CmNsYXNzIElkZW9uZSB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgIHsKCVN0cmluZ1tdIGlucHV0ID0gImNoYXQsIGV2ZXIsIHNuYXBjaGF0LCBzbmFwLCBzYWxlc3BlcnNvbiwgcGVyLCBwZXJzb24sIHNhbGVzLCBzb24sIHdoYXRzb2V2ZXIsIHdoYXQsIHNvIi5zcGxpdCgiLCAiKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGZpbmQoaW5wdXQpKSk7Cn0KCnByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGZpbmQoU3RyaW5nW10gYXJyYXkpIHsKICAgIFNldDxTdHJpbmc+IHdvcmRzID0gbmV3IExpbmtlZEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KGFycmF5KSk7CiAgICBTZXQ8U3RyaW5nPiBvdGhlcldvcmRzID0gbmV3IEhhc2hTZXQ8Pih3b3Jkcyk7CiAgICBmb3IgKEl0ZXJhdG9yPFN0cmluZz4gaSA9IHdvcmRzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApIHsKICAgICAgICBTdHJpbmcgbmV4dCA9IGkubmV4dCgpOwogICAgICAgIG90aGVyV29yZHMucmVtb3ZlKG5leHQpOwogICAgICAgIGlmIChpc0NvbXBvdW5kKG5leHQsIG90aGVyV29yZHMpKSB7CiAgICAgICAgICAgIGkucmVtb3ZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3RoZXJXb3Jkcy5hZGQobmV4dCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHdvcmRzLnN0cmVhbSgpLnRvQXJyYXkoU3RyaW5nW106Om5ldyk7Cn0KCnByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDb21wb3VuZChTdHJpbmcgc3RyaW5nLCBTZXQ8U3RyaW5nPiBvdGhlcldvcmRzKSB7CiAgICBpZiAob3RoZXJXb3Jkcy5jb250YWlucyhzdHJpbmcpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKFN0cmluZyB3b3JkIDogb3RoZXJXb3JkcykgewogICAgICAgIGlmIChzdHJpbmcuc3RhcnRzV2l0aCh3b3JkKSkgewogICAgICAgICAgICByZXR1cm4gaXNDb21wb3VuZChzdHJpbmcucmVwbGFjZUFsbCgiXiIgKyB3b3JkLCAiIiksIG90aGVyV29yZHMpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyaW5nLmVuZHNXaXRoKHdvcmQpKSB7CiAgICAgICAgICAgIHJldHVybiBpc0NvbXBvdW5kKHN0cmluZy5yZXBsYWNlQWxsKHdvcmQgKyAiJCIsICIiKSwgb3RoZXJXb3Jkcyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9Cn0=