На моих примерах работает. Валидатор говорит таймаут.
Вроде все коротко и лаконично.
Пока в листе есть слова добавляю слово в начало или в конец и удаляю его.
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.ArrayList;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
//...
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
FileInputStream fis = new FileInputStream(/*"D:\\file.txt"*/buf.readLine());
BufferedReader file=new BufferedReader(new InputStreamReader(fis/*, "utf-8"*/));
ArrayList<String> list=new ArrayList<>();
String s=file.readLine();
StringBuilder result = getLine(s.split(" "));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length==0) return new StringBuilder("");
ArrayList<String> list1=new ArrayList<String>();
for (String word:words ) {
list1.add(word);
}
StringBuilder sb=new StringBuilder();
sb.append(list1.get(0)+" ");
list1.remove(0);
while (list1.size()>0){
for (int i = 0; i < list1.size(); i++) {
String s=list1.get(i).toLowerCase();
String s2=sb.toString().trim().toLowerCase();
if (s.charAt(0)==s2.charAt(s2.length()-1)) {
sb.append(list1.get(i)+" ");
list1.remove(i);
break;
}
else if (s.charAt(s.length()-1)==s2.charAt(0)) {
sb.insert(0,list1.get(i)+" ");
list1.remove(i);
break;
}
}
}
return sb;
}
}