Ввод:
Иваново Петрово Сидорово Урюпинск
Киев Нью-Йорк Париж Амстердам Вена Мельбурн Антананариву
СПб Китай-город омск дублин Вадуц
Вывод:
Иваново омск Киев Вена Амстердам Мельбурн Нью-Йорк Китай-город дублин
И что же тут, любопытно, не соответствует условию задачи?
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bs = new BufferedReader (new InputStreamReader(System.in));
FileReader fre = new FileReader(bs.readLine());
bs = new BufferedReader(fre);
String params="";
while (bs.ready()) params += bs.readLine() + " ";
String[] parampam = params.split(" ");
StringBuilder result = getLine(parampam);
System.out.println(result.toString().trim());
}
public static StringBuilder getLine(String... words) {
StringBuilder bildr = new StringBuilder();
if (words.length==0) return bildr;
bildr.append(words[0]+" ");
char endChar = bildr.charAt(words[0].length()-1);
List<Integer> alreadyUsed = new ArrayList<>();
alreadyUsed.add(0);
for (int k=1; k<words.length; k++) {
for (int i=0; i<words.length; i++) {
String needForStart = String.valueOf(endChar);
if ((words[i].startsWith(needForStart.toLowerCase())||
(words[i].startsWith(needForStart.toUpperCase())))
&&(!alreadyUsed.contains(i))) {
bildr.append(words[i]);
alreadyUsed.add(i);
endChar = words[i].charAt(words[i].length()-1);
break;
}
}
if (k<words.length-1) bildr.append(" ");
}
return bildr;
}
}