aboutsummaryrefslogtreecommitdiff
path: root/challenge-074/shawn-wagner/java/ch2.java
diff options
context:
space:
mode:
authorShawn <shawnw.mobile@gmail.com>2020-08-17 04:59:47 -0700
committerShawn <shawnw.mobile@gmail.com>2020-08-17 04:59:47 -0700
commit218420ca9c9c744ce225312a44fe03110ff725b7 (patch)
treee7350390b1e5a40da1dbfe7501829217976d403f /challenge-074/shawn-wagner/java/ch2.java
parentf035783d130995c470a1c9349934ff84af5bc840 (diff)
downloadperlweeklychallenge-club-218420ca9c9c744ce225312a44fe03110ff725b7.tar.gz
perlweeklychallenge-club-218420ca9c9c744ce225312a44fe03110ff725b7.tar.bz2
perlweeklychallenge-club-218420ca9c9c744ce225312a44fe03110ff725b7.zip
Solutions for challenge 074.
Both parts, in perl, tcl and java.
Diffstat (limited to 'challenge-074/shawn-wagner/java/ch2.java')
-rw-r--r--challenge-074/shawn-wagner/java/ch2.java31
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");
+ }
+}