Прошу помочь тестами!
Нашла в комментариях такой:
Венеция Ялта Минск Амстердам Москва Алушта Атланта Афины Ысити Столькольм Исбук Курск Кишинев Вена Астрахань Ьсити Иерусалим Мюнхен Норильск Канзас Киев -
все красиво отрабатывает.
Хочу понять, где искать ошибку
Заранее спасибо! :)
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();
BufferedReader fileReader = new BufferedReader(new FileReader(file));
StringBuilder builder = new StringBuilder();
while (fileReader.ready()) {
String line = fileReader.readLine();
builder = builder.append(line).append(" ");
}
String s = builder.toString();
String[] words = s.split(" ");
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length == 0) return new StringBuilder();
ArrayList<String> list = new ArrayList<>();
HashMap<String, Integer> start = new HashMap<>();
HashMap<String, Integer> end = new HashMap<>();
for (int i = 0; i < words.length; i++) {
String city = words[i];
String first = city.substring(0, 1).toLowerCase(Locale.ROOT);
String last = city.substring(city.length() - 1).toLowerCase(Locale.ROOT);
start.computeIfPresent(first, (key, value) -> value + 1);
start.putIfAbsent(first, 1);
end.computeIfPresent(last, (key, value) -> value + 1);
end.putIfAbsent(last, 1);
list.add(city);
}
while (list.size() > 1) {
String word = list.get(0);
list.remove(0);
String first = word.substring(0, 1).toLowerCase(Locale.ROOT);
String last = word.substring(word.length() - 1).toLowerCase(Locale.ROOT);
StringBuilder cities = new StringBuilder(word);
if (start.get(last) == end.get(last) && (start.get(last) == Collections.min(start.values()))){
for (int j = 0; j < list.size(); j++){
String cityN = list.get(j);
String firstN = cityN.substring(0, 1).toLowerCase(Locale.ROOT);
if (firstN.equals(last)) {
cities.append(" ").append(cityN);
list.remove(j);
start.computeIfPresent(last, (key, value) -> value - 1);
if (start.get(last) == 0) start.remove(last);
end.computeIfPresent(last, (key, value) -> value - 1);
if (end.get(last) == 0) end.remove(last);
list.add(cities.toString());
break;
}
}
} else {
list.add(word);
}
}
StringBuilder result = new StringBuilder(list.get(0));
return result;
}
}