Не увенчалась успехом) Последний пункт не проходит. На файлах с 6-7 слов работает быстро, конечно, чем больше слов, тем дольше ищет. Есть ещё мысли как переделать, но может я тут что-то упускаю незначительное)
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;
import java.util.StringTokenizer;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
ArrayList<String> words1 = new ArrayList<>();
BufferedReader reader1 = new BufferedReader(new FileReader(fileName));
while (reader1.ready()){
String[] word = reader1.readLine().split(" ");
for (String s : word) {
if (!s.equals("") && !s.equals(" ")) words1.add(s);
}
}
reader1.close();
String[] words = words1.toArray(new String[0]);
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder rezult = new StringBuilder("");
if (words.length == 0) return rezult;
String[] words11 = words.clone();
for (int a = 0; a < words11.length - 2; ){
String letter1 = words11[a].toLowerCase();
char one = letter1.charAt(letter1.length() - 1);
String letter2 = words11[a + 1].toLowerCase();
char two = letter2.charAt(0);
if (one == two) {
a++;
//System.out.println(Arrays.toString(words));
}
else {
Collections.shuffle(Arrays.asList(words11));
a = 0;
}
}
rezult.append(words11[0]);
for (int b = 1; b < words11.length; b++)
rezult.append(" ").append(words11[b]);
return rezult;
}
}