Валидатор: Программа работала слишком долго и была закрыта!
У меня ошибки в коде?
При тестировании работает корректно
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
D:/Programming/2209-np.txt
*/
public class Solution {
public static void main(String[] args) {
String fileName = null;
String fullString;
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
) {
fileName = br.readLine();
} catch (IOException e) {
System.out.println("IOException");
}
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + " ");
}
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException");
} catch (IOException e) {
System.out.println("IOException");
}
fullString = sb.toString();
String[] strings = fullString.split(" ");
//...
StringBuilder result = getLine(strings);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder result = new StringBuilder();
Map<StringBuilder, Integer> cityMap = new HashMap<>();
ArrayList<String> cities = new ArrayList<>(Arrays.asList(words));
ArrayList<String> citiesToTry = new ArrayList<>(Arrays.asList(words));
Collections.sort(cities);
int count = 0;
for (int j = 0; j < cities.size(); j++) {
StringBuilder line = tryAndRemove(cities.get(j), citiesToTry);
String[] words1 = line.toString().split(" ");
count = words1.length;
cityMap.put(line, count);
}
int maxValue = 0;
for (Map.Entry<StringBuilder, Integer> p : cityMap.entrySet()) {
if (p.getValue() > maxValue) {
maxValue = p.getValue();
}
}
for (Map.Entry<StringBuilder, Integer> p : cityMap.entrySet()) {
if (p.getValue() == maxValue) {
result = p.getKey();
}
}
return result;
}
public static boolean wordIsOk(String word1, String word2) {
char lastChar = word1.charAt(word1.length() - 1);
char firstChar = word2.charAt(0);
if (Character.toString(lastChar).equals(Character.toString(firstChar).toLowerCase())) {
return true;
} else
return false;
}
public static StringBuilder tryAndRemove(String city, ArrayList<String> citiesToTry) {
StringBuilder line = new StringBuilder(city);
ArrayList<String> citiesToDelete = new ArrayList<>(citiesToTry);
while (citiesToDelete.size() > 1) {
for (int i = 0; i < citiesToDelete.size(); i++) {
if (wordIsOk(city, citiesToDelete.get(i))) {
line.append(" " + citiesToDelete.get(i));
//System.out.println("actual line: " + line.toString());
citiesToDelete.remove(i);
//System.out.println("citiesToTry.length: " + citiesToTry.size());
city = line.toString();
}
}
}
return line;
}
}