My output for "Okinawa Washington Auckland Kalamazoo Norfolk" is "Washington Norfolk Kalamazoo Okinawa Auckland".
package com.codegym.task.task22.task2209;
/*
Make a word chain
*/
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
List<String> words = new ArrayList<>();
try (BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
BufferedReader read = new BufferedReader(new FileReader(buff.readLine()))) {
while (read.ready()) words.addAll(Arrays.asList(read.readLine().split("\\s+")));
}
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(List<String> words) {
if (words.size() < 1) return new StringBuilder();
Set<Character> set = new HashSet<>();
StringBuilder sb = new StringBuilder();
words.forEach(f -> set.add(f.toLowerCase().charAt(f.length() - 1)));
for (String word : words) {
if (!set.contains(word.toLowerCase().charAt(0))) {
sb.append(word).append(" ");
words.remove(word);
break;
}
}
for (int i = 0; i < words.size(); ++i) {
String s = words.get(i);
if (s.toLowerCase().charAt(0) == sb.charAt(sb.length() - 2)) {
sb.append(s).append(" ");
words.remove(s);
i = -1;
}
}
return words.size() > 0 ? new StringBuilder() : sb.deleteCharAt(sb.length() - 1);
}
}