Перепробованы всевозможные варианты. Все учел, что не так?
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args)throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(reader.readLine())));
String[] words = fileReader.readLine().split(" ");
Arrays.sort(words);
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if(words == null || words.length == 0)return new StringBuilder();
ArrayList<String> list = new ArrayList<String>();
ArrayList<StringBuilder> paths = new ArrayList<StringBuilder>();
for(String n : words){
list.add(n);
}
for (int i = 0; i < list.size(); i++) {
String curString = list.get(i);
StringBuilder str = new StringBuilder(curString);
for (int j = 0; j < list.size(); j++) {
for (String ns : list) {
if (str.toString().endsWith(ns.substring(0, 1).toLowerCase()) && !(str.toString().contains(ns))) {
str.append(" " + ns);
break;
}
}
}
paths.add(str);
}
String sb = "";
for(StringBuilder n : paths){
if(n.toString().split(" ").length > sb.split(" ").length)sb = n.toString();
}
StringBuilder sb2 = new StringBuilder(sb);
return sb2;
}
}