Очень долго не могу пройти валидацию по последнему пункту. Пробовал многие предлагаемые в комментариях входные строки для теста. Из тех что пробовал - все отрабатывают верно, но валидатор не пропускает по последнему пункту. Подскажите пожалуйста, в чем может быть причина. Заранее благодарен.
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String inputLine = reader.readLine();
String[] inputArray = inputLine.split(" ");
// System.out.println(Arrays.toString(inputArray));
/* String[] inputArray2 = {"Архангельск", "Ковров", "Витебск", "Кострома"};
String [] inputArray3 = {"Дербент", "Якутск", "Арзамас", "Рог", "Киев", "Кувшиново", "Капустин-Яр",
"Стокгольм", "Флоренция", "Глен-Хоп", "Тобольск", "Нью-Йорк", "Афины", "Муром", "Осташков",
"Прага", "Кострома", "Вена", "Амстердам" ,"Мельбурн" ,"Волгоград","Минск"};*/
StringBuilder result = getLine(inputArray);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) throws InterruptedException {
StringBuilder stringBuilder = new StringBuilder("");
if (words.length == 0) {
return stringBuilder;
}
if (words.length == 1) {
return stringBuilder.append(words[0]);
}
List<String> listWords = new ArrayList<>(Arrays.asList(words));
List<Character> firstLetters = new ArrayList<>();
List<Character> endLetters = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
firstLetters.add(words[i].toLowerCase().charAt(0));
endLetters.add(words[i].toLowerCase().charAt(words[i].length() - 1));
}
Collections.sort(firstLetters);
Collections.sort(endLetters);
/* System.out.println("Первые буквы - " + firstLetters);
System.out.println("Последние буквы - " + endLetters);*/
/* List<Character> unpairedFirstLetters = new ArrayList<>(firstLetters);
unpairedFirstLetters.removeAll(endLetters);
System.out.println("Непарные первые буквы - " + unpairedFirstLetters);
List<Character> unpairedEndLetters = new ArrayList<>(endLetters);
unpairedEndLetters.removeAll(firstLetters);
System.out.println("Непарные последние буквы - " + unpairedEndLetters);*/
List<Character> unpairedFirstLetters = new ArrayList<>(firstLetters);
List<Character> unpairedEndLetters = new ArrayList<>(endLetters);
Iterator<Character> iterator = unpairedFirstLetters.iterator();
while (iterator.hasNext()) {
Character character = iterator.next(); // must be called before you can call i.remove()
if (unpairedEndLetters.contains(character)) {
iterator.remove();
unpairedEndLetters.remove(character);
}
}
/* System.out.println("Непарные первые буквы - " + unpairedFirstLetters);
System.out.println("Непарные последние буквы - " + unpairedEndLetters);*/
if (unpairedEndLetters.size() > 1 || unpairedFirstLetters.size() > 1) {
//System.out.println("Невозможно построить цепочку");
return stringBuilder;
}
List<String> inputWords = new ArrayList(Arrays.asList(words));
List<String> result = new ArrayList<>();
if (unpairedFirstLetters.size() != 0) {
for (int i = 0; i < words.length; i++) {
if (words[i].toLowerCase().charAt(0) == unpairedFirstLetters.get(0)) {
inputWords.remove(words[i]);
result.add(words[i]);
break;
}
}
} else {
result.add(inputWords.get(0));
inputWords.remove(0);
}
String endWord = null;
if (unpairedEndLetters.size() != 0) {
for (int i = 0; i < words.length; i++) {
if (words[i].toLowerCase().charAt(words[i].length() - 1) == unpairedEndLetters.get(0)) {
inputWords.remove(words[i]);
endWord = words[i];
break;
}
}
}
/*System.out.println("Первое слово в списке - " + result);
System.out.println("Оставшиеся слова - " + inputWords);
System.out.println("Последнее слово - " + endWord);
System.out.println(result);*/
while (inputWords.size() > 0) {
// System.out.println("Проход " + countWhile + " по while");
for (String word : inputWords) {
if (word.toLowerCase().charAt(0) == result.get(result.size() - 1).toLowerCase().charAt(result.get(result.size() - 1).length() - 1)) {
result.add(word);
inputWords.remove(word);
break;
}
}
}
if (endWord != null) {
result.add(endWord);
}
for (int i = 0; i < result.size(); i++) {
stringBuilder.append(result.get(i));
// if (i != result.size() - 1) {
// stringBuilder.append(" ");
// }
if(i==result.size()-1) {
continue;
} else{
stringBuilder.append(" ");
}
}
return stringBuilder;
}
}