Привет, мой код уходит в тайм-аут и поэтому не могу пройти валидацию, как мне лучше его исправить? Я добавил счетчик i для подсчета, сколько раз я возвращаю неподходящее слова обратно в лист, получилось 73. Это много? Вот моя строка для теста, которая проходит:
Мельбурн Токио Москва Ростов-на-Дону Киев Нью-Йорк Ухань Канберра Вашингтон Дедовск Калининград Душанбе Ереван Амстердам Вена Норильск Ленинград Кыштым Адлер Комсомольск Архангельск Иркутск Нью-Джерси Николаев Орёл Кронштадт Красноярск
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
List<String> list = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()))) {
while (fileReader.ready()) {
list.addAll(Arrays.asList(fileReader.readLine().split(" ")));
}
}
StringBuilder result = getLine(convert(list));
System.out.println(result.toString());
}
public static String[] convert(List<String> list) {
String[] result = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
public static StringBuilder getLine(String... words) {
if (words == null || words.length == 0) {
return new StringBuilder();
}
LinkedList<String> list = new LinkedList<>(Arrays.asList(words));
StringBuilder builder = new StringBuilder();
builder.append(list.poll());
int i = 0;
while (!list.isEmpty()) {
String s = list.poll();
if (builder.substring(builder.length() - 1).equalsIgnoreCase(s.substring(0, 1))) {
builder.append(" ").append(s);
} else if (builder.substring(0, 1).equalsIgnoreCase(s.substring(s.length() - 1))) {
builder.insert(0, s + " ");
} else {
list.add(s);
i++;
}
}
System.out.println(i);
return builder;
}
}