Доброго времени суток, JR! В этой не легкой задаче дошёл до того, что мой код проходит проверку на данные строки Киев Нью-Йорк Амстердам Вена Мельбурн, но другие тесты принимает только если звёзды сойдутся. Прошу подсказать в какую сторону направить вектор мысли, на данном этапе я бы реализовал, что при найденном "лишнем" слове выходить из цикла, перемешивать и начинать заново. Но понимаю, что это затратно, да и как это реализовать не знаю
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader readPath = new BufferedReader(new InputStreamReader(System.in));
FileReader file = new FileReader(readPath.readLine());
BufferedReader readFile = new BufferedReader(file);
String[] line = readFile.readLine().split(" ");
StringBuilder result = getLine(line);
System.out.println(result);
}
public static StringBuilder getLine(String... words) {
if (words == null) return new StringBuilder();
StringBuilder stringBuilder = new StringBuilder(words[0]);
LinkedList<String> arrayOfWords = new LinkedList<>(Arrays.asList(words).subList(1, words.length));
while(!arrayOfWords.isEmpty()) {
if (Character.toString(stringBuilder.charAt(stringBuilder.length() - 1)).equalsIgnoreCase(Character.toString(arrayOfWords.get(0).charAt(0)))) {
stringBuilder.append(" ").append(arrayOfWords.get(0));
arrayOfWords.removeFirst();
} else if (Character.toString(arrayOfWords.get(0).charAt(arrayOfWords.get(0).length() - 1)).equalsIgnoreCase(Character.toString(stringBuilder.charAt(0)))) {
stringBuilder.insert(0, arrayOfWords.get(0) + " ");
arrayOfWords.removeFirst();
} else {
arrayOfWords.add(arrayOfWords.get(0));
arrayOfWords.removeFirst();
}
}
return stringBuilder;
}
}