diff options
Diffstat (limited to 'challenge-074/shawn-wagner/java/ch2.java')
| -rw-r--r-- | challenge-074/shawn-wagner/java/ch2.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/challenge-074/shawn-wagner/java/ch2.java b/challenge-074/shawn-wagner/java/ch2.java new file mode 100644 index 0000000000..65a8a04a67 --- /dev/null +++ b/challenge-074/shawn-wagner/java/ch2.java @@ -0,0 +1,31 @@ +// Same algorithm as the perl version, using a LinkedHashMap to +// preserve order of keys, and streams to avoid most loops. + +import java.util.*; + +class ch2 { + private static void task2(String s) { + ArrayList<Character> chars = new ArrayList<Character>(); + chars.ensureCapacity(s.length()); + s.chars().forEach(ch -> chars.add((char)ch)); + Collections.reverse(chars); + StringBuilder sb = new StringBuilder(); + while (chars.size() > 0) { + HashMap<Character, Integer> counts = + new LinkedHashMap<Character, Integer>(); + chars.stream().forEach(ch -> counts.put(ch, counts.getOrDefault(ch, 0) + 1)); + char fnr = counts.entrySet().stream() + .filter(entry -> entry.getValue() == 1) + .findFirst().map(entry -> entry.getKey()).orElse('#'); + sb.append(fnr); + chars.remove(0); + } + sb.reverse(); + System.out.println(sb); + } + + public static void main(String[] args) { + task2("ababc"); + task2("xyzzyx"); + } +} |
