Код прекрасно (и быстро) работает в IntelliJ IDEA, выдавая правильное решение.
Но при валидации выдаёт ошибку Time out.
А при валидации в браузере пишет "Проверьте ваш код, похоже вы используете бесконечный цикл".
Прежде чем обращаться к администрации хочу узнать, может я что-то упустил?
P.S. Тестировал на "Киев Нью-Йорк Амстердам Вена Мельбурн", как в задаче, и "01 25 49 70 83 67 54 36 98 12".
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) {
String string = null;
try (BufferedReader console = new BufferedReader(new InputStreamReader(System.in))) {
BufferedReader reader = new BufferedReader(new FileReader(console.readLine()));
string = reader.readLine().trim(); //считали строку с файла
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException();
}
String[] words = string.split(" "); //разбили строку на слова
StringBuilder result = getLine(words); //передали слова в метод
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder stringBuilder = new StringBuilder();
if (words == null || words.length == 0) return stringBuilder; //если слов нет или пустая ссылка, то возвращаем пустой StringBuilder
stringBuilder = new StringBuilder(words[0]); //передаем первое слово в StringBuilder
if (words.length == 1) return stringBuilder; //если оно единственное, то возвращаем StringBuilder с ним
ArrayList<String> list = new ArrayList<>(); //остальные слова передаём в ArrayList
for (int i = 1; i < words.length; i++) {
list.add(words[i]);
}
while (!list.isEmpty()) { //пока в ArrayList будут слова
for (int i = 0; i < list.size();) { //проходимся по ним
String stringBuilderFirstChar = String.valueOf(stringBuilder.charAt(0));
String stringBuilderLastChar = String.valueOf(stringBuilder.charAt(stringBuilder.length() - 1));
String word = list.get(i);
String wordFirstChar = String.valueOf(word.charAt(0));
String wordLastChar = String.valueOf(word.charAt(word.length() - 1));
if (stringBuilderLastChar.equalsIgnoreCase(wordFirstChar)) { //пишем слово или сзади к StringBuilder
stringBuilder.append(" ");
stringBuilder.append(word);
list.remove(word); //и удаляем его из ArrayList
} else if (wordLastChar.equalsIgnoreCase(stringBuilderFirstChar)) { //или пишем слово спереди к StringBuilder
stringBuilder.insert(0, " ");
stringBuilder.insert(0, word);
list.remove(word); //и также удаляем его из ArrayList
} else i++; //или пропускаем его и переходим к следующему
}
}
return stringBuilder; //как только все слова будут записаны в StringBuilder, возвращаем его
}
}