Здравствуйте! Крутил так и сяк, выдает правильные варианты.
пробовал из предложенного:
1. Киев Нью-Йорк Роттердам Вена Мельбурн
2. Венеция Ялта Минск Амстердам Москва Алушта Атланта Афины Ысити Столькольм Исбук Курск Кишинев Вена Астрахань Ьсити Иерусалим Мюнхен Норильск Канзас Киев
3. Киев Нью-Йорк Амстердам Вена Мельбурн Милан
Во всех вариантах выдает правильные варианты.
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
import java.util.stream.Stream;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) {
try (BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
BufferedReader reader = new BufferedReader(new FileReader(input.readLine()))) {
StringBuilder stringBuilder = new StringBuilder();
while (reader.ready()) {
stringBuilder.append(reader.readLine()).append(" ");
}
String data = stringBuilder.toString();
String[] listW = data.split("\\s");
StringBuilder result = getLine(listW);
System.out.println(result.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
public static StringBuilder getLine(String... words) {
if (words.length == 0) return new StringBuilder();
StringBuilder [] correctLine = new StringBuilder[words.length];
for (int i = 0; i < words.length; i++) {
correctLine[i] = new StringBuilder(words[i]);
int count = 0;
while (count < words.length) {
for (String el : words) {
if (!correctLine[i].toString().contains(el)) {
String last = correctLine[i].substring(correctLine[i].length() - 1);
String first = el.substring(0, 1);
if (last.equalsIgnoreCase(first)) {
correctLine[i].append(" ").append(el);
break;
}
}
}
count++;
}
}
return Stream.of(correctLine).max(Comparator.comparingInt(StringBuilder::length)).get();
}
}