Вообщем по быстрому решил написать и решить задачу. Немного извpaщённым способом...
В итоги всё работает идеально, но валидатор проверяет 10 секунд и ... "Программа работала слишком долго"
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
private static List<String> stringList = new ArrayList<>();
private static String[] varargs;
public static void main(String[] args) {
BufferedReader readerConsoleFileName = new BufferedReader(new InputStreamReader(System.in));
String lineRead;
try (InputStreamReader fileRead = new InputStreamReader(new FileInputStream(readerConsoleFileName.readLine()));
BufferedReader readerLine = new BufferedReader(fileRead);) {
while ((lineRead = readerLine.readLine()) != null) {
varargs = lineRead.split(" ");
}
} catch (Exception e) {
e.printStackTrace();
}
for (String s : varargs) {
stringList.add(s);
}
notNull(stringList);
String[] resultArray = new String[stringList.size()];
for (int i = 0; i < resultArray.length; i++) {
resultArray[i] = stringList.get(i);
}
//... varargs
StringBuilder result = getLine(resultArray);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < words.length; i++) {
if (i == words.length - 1) {
stringBuilder.append(words[i]);
} else stringBuilder.append(words[i]).append(" ");
}
return stringBuilder;
}
private static void notNull(List<String> arrayList) {
Collections.shuffle(arrayList);
boolean status = false;
String start;
String end;
while (true) {
for (int i = 0; i < arrayList.size(); i++) {
if (i == arrayList.size() - 1) {
status = true;
break;
}
end = arrayList.get(i).toLowerCase().substring(arrayList.get(i).length() - 1);
start = arrayList.get(i + 1).toLowerCase().substring(0, 1);
if (!end.equals(start)) {
status = false;
break;
}
}
if (status) break;
else Collections.shuffle(arrayList);
}
}
}