Работает корректно, пробовал разные варианты, но валидатору не нравится. ПОдскажите плиз что именно?
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(name)));
String line = null;
String text = "";
while ((line = reader.readLine()) != null) {
text += line + " ";
}
String[] words = text.split(" ");
//System.out.println(words);
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder sb = new StringBuilder();
String[] array = words;
String tempValue = null;
TreeMap<Character, List<Integer>> first = new TreeMap<>();
HashSet<String> resultWord = new HashSet<>();
for (int i = 0; i < words.length; i++) {
if (!first.containsKey(words[i].charAt(0))) {
ArrayList<Integer> list = new ArrayList<>();
list.add(i);
first.put(words[i].charAt(0), list);
} else {
first.get(words[i].charAt(0)).add(i);
}
}
//System.out.println(first);
for (int y = 0; y < array.length; y++) {
if (y == 0) {
if (words.length == 0) return null;
tempValue = array[first.firstEntry().getValue().get(0)];
first.firstEntry().getValue().remove(0);
sb.append(tempValue);
resultWord.add(tempValue);
} else {
Character end = tempValue.charAt(tempValue.length() - 1);
end = Character.toUpperCase(end);
if (!first.get(end).isEmpty()) {
int indexArray = first.get(end).get(0);
first.get(end).remove(0);
tempValue = array[indexArray];
if (!resultWord.contains(tempValue)){
sb.append(" ").append(tempValue);
resultWord.add(tempValue);
}
}
}
}
return sb;
}
}