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.toArray(new String[0]));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length < 1) return new StringBuilder();
List<String> wordList = new ArrayList<>(Arrays.asList(words));
Set<Character> set = new HashSet<>();
StringBuilder sb = new StringBuilder();
wordList.forEach(f -> set.add(f.toLowerCase().charAt(f.length() - 1)));
for (String word : words) {
if (!set.contains(word.toLowerCase().charAt(0))) {
sb.append(word);
wordList.remove(word);
break;
}
}
for (int i = 0; i < wordList.size(); ++i) {
String s = wordList.get(i);
if (s.toLowerCase().charAt(0) == sb.charAt(sb.length() - 1)) {
sb.append(" ").append(s);
wordList.remove(s);
i = -1;
}
}
return wordList.size() > 0 ? new StringBuilder() : sb;
}
}