Here is another version, based on answer from @rell but with no HashSet
or char[]
creation.
private static boolean check(String input) {
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (Character.isLetter(ch) && input.indexOf(ch, i + 1) != -1) {
return true;
}
}
return false;
}
For smaller input strings, this will most likely be faster because of that. But for longer input strings, the version from @rell is potentially faster as he is using a HashSet
with O(1)
lookup/insert, and since the loop is O(n)
the total is O(n)
. And my solution is O(n^2)
(loop O(n)
multiplied with indexOf
with O(n)
), worst case input would be something like this abcdefghijklmnopqrstuvwxyzz
.
Update Another version with streams.
private static boolean check(String input) {
IntStream characters = input.codePoints().filter(Character::isLetter);
return characters
.distinct()
.count() == characters.count();
}
Update Fixed bug in stream version