Это 4 попытка переписать решение, чтобы принял валидатор, и костылей тут столько, что можно снабдить целую больницу. Но все-таки, что не так? Со всеми протестированными вариантами отрабатывает.
Находит самую длинную цепочку из возможных.
package com.javarush.task.task22.task2209;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) {
String string = null;
Scanner scanner = new Scanner(System.in);
File file = new File(scanner.nextLine());
Path path = file.toPath();
try {
string = Files.readAllLines(path).toString();
} catch (IOException e) {
e.printStackTrace();
}
String[]strings = string.split(" ");
Arrays.sort(strings);
//...
StringBuilder result = getLine(strings);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
//фиктивное использование стрингбилдера
StringBuilder sb = new StringBuilder("a");
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
list.add(words[i]);
}
Collections.sort(list);
//fin - самая длинная строка на данный момент
String fin = "";
//current - текущая строка
String current = "";
for (int k = 0; k < list.size(); k++) {
//клонируем исходный массив и будем работать с ним(каждый раз заново)
list.add(list.get(0));
list.remove(0);
List<String> copy = (ArrayList<String>)list.clone();
//проходим аглоритм, ставя каждое из возможных слов на первое место
current = copy.get(0);
while (copy.size() > 1) {
boolean findNextFord = false;
String a = copy.get(0);
char ch = a.charAt(a.length() - 1);
String cha = String.valueOf(ch).toLowerCase();
for (int j = 1; j < copy.size(); j++) {
if (String.valueOf(copy.get(j).charAt(0)).toLowerCase().equals(cha)) {
current += " " + copy.get(j);
copy.set(0, copy.get(j));
copy.remove(j);
findNextFord = true;
break;
}
}
if(findNextFord == false) break;
}
//проверяем, длиннее ли полученная цепочка, чем максимальная на данный момент
if (current.split(" ").length >= fin.split(" ").length) {
fin = current;
}
}
return sb = new StringBuilder(fin);
}
}package com.javarush.task.task22.task2209;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) {
String string = null;
Scanner scanner = new Scanner(System.in);
File file = new File(scanner.nextLine());
Path path = file.toPath();
try {
string = Files.readAllLines(path).toString();
} catch (IOException e) {
e.printStackTrace();
}
String[]strings = string.split(" ");
Arrays.sort(strings);
//...
StringBuilder result = getLine(strings);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder sb = new StringBuilder("a");
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
list.add(words[i]);
}
Collections.sort(list);
//fin - самая длинная строка на данный момент
String fin = "";
//current - текущая строка
String current = "";
for (int k = 0; k < list.size(); k++) {
//клонируем исходный массив и будем работать с ним(каждый раз заново)
list.add(list.get(0));
list.remove(0);
List<String> copy = (ArrayList<String>)list.clone();
//проходим аглоритм, ставя каждое из возможных слов на первое место
current = copy.get(0);
while (copy.size() > 1) {
boolean findNextFord = false;
String a = copy.get(0);
char ch = a.charAt(a.length() - 1);
String cha = String.valueOf(ch).toLowerCase();
for (int j = 1; j < copy.size(); j++) {
if (String.valueOf(copy.get(j).charAt(0)).toLowerCase().equals(cha)) {
current += " " + copy.get(j);
copy.set(0, copy.get(j));
copy.remove(j);
findNextFord = true;
break;
}
}
if(findNextFord == false) break;
}
//проверяем, длиннее ли полученная цепочка, чем максимальная на данный момент
if (current.split(" ").length >= fin.split(" ").length) {
fin = current;
}
}
return sb = new StringBuilder(fin);
}
}