За 8 часов устал от этой задачи. Вывод работает правильно с такой строкой:
" трам Нет труД муд доМ мандарин март Ноорка арка аа "
Рекурсию не рассматривал, т.к. ничего о ней не знаю (всё изучаю с полного нуля). Пытался решить доступными мне способами, но валидатор не пропускает. Я здесь всё)
Буду благодарен, если кто-то подскажет что мне вообще лучше сделать (подсказка? что почитать? пропустить задачу?, etc.)
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
// C:\\Users\\Mr.X\\Desktop\\Filename.txt
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = bufferedReader.readLine();
bufferedReader.close();
List<String> lines = Files.readAllLines(Paths.get(fileName));
StringBuilder result = getLine(lines.toArray(new String[lines.size()]));
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.toString() == null || words.length == 0)
return new StringBuilder("");
List<String> listOfWords = new ArrayList<>();
for (String element : words) {
String[] arrayOfWords = element.trim().split("\\s+");
for (String elementOfArray : arrayOfWords) {
listOfWords.add(elementOfArray);
}
}
/*for (String element : listOfWords)
System.out.print(element + " ");
System.out.println();*/
StringBuilder sb = null;
List<String> sortedList = new ArrayList<>();
List<String> bufferList = new ArrayList<>();
int maxLength = 0;
for (int n = 0; n < 1_000_000; n++) {
sb = new StringBuilder(listOfWords.get(0));
sortedList.add(listOfWords.get(0));
for (int i = 1; i < listOfWords.size(); i++) {
String lastChar = sb.toString().trim().substring(sb.toString().length() - 1);
String firstChar = listOfWords.get(i).substring(0, 1);
if (firstChar.equalsIgnoreCase(lastChar)) {
sb.append(" " + listOfWords.get(i));
sortedList.add(listOfWords.get(i));
bufferList.add(listOfWords.remove(i));
i = 1;
}
}
for (String element : bufferList)
listOfWords.add(element);
bufferList.clear();
if (maxLength < sortedList.size()) {
maxLength = sortedList.size();
}
Collections.shuffle(listOfWords);
sortedList.clear();
}
// System.out.println(maxLength);
while (true) {
sb = new StringBuilder(listOfWords.get(0));
sortedList.add(listOfWords.get(0));
for (int i = 1; i < listOfWords.size(); i++) {
String lastChar = sb.toString().trim().substring(sb.toString().length() - 1);
String firstChar = listOfWords.get(i).substring(0, 1);
if (firstChar.equalsIgnoreCase(lastChar)) {
sb.append(" " + listOfWords.get(i));
sortedList.add(listOfWords.get(i));
bufferList.add(listOfWords.remove(i));
i = 1;
}
}
if (sortedList.size() == maxLength) {
for (int b = 1; b < listOfWords.size(); b++)
sb.append(" " + listOfWords.get(b));
break;
}
for (String element : bufferList)
listOfWords.add(element);
bufferList.clear();
Collections.shuffle(listOfWords);
sortedList.clear();
}
return sb;
}
}