Всем хай, товарищи каким должен быть вывод, сначало должна быть самая длинная цепочка слов, а потом более коротка или не имеет значения? Должен я выводить слова которые вообще не имеют пары? В общем кто сделал,расскажите по подробнее пожалуйста) P.S. С примером программа работает верно, но валидатор не принимает, код можно не смотреть, нужно только более подробное условие, спасибо!)
package com.javarush.task.task22.task2209;
import javax.lang.model.element.Element;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
import java.sql.SQLOutput;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException, InterruptedException {
BufferedReader fileName = new BufferedReader(new InputStreamReader(System.in));
BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(fileName.readLine()), "UTF-8"));
String ss;
StringBuilder sb = new StringBuilder();
while ((ss = file.readLine()) != null) {
sb.append(ss).append(" ");
}
file.close();
fileName.close();
String[] mas = sb.toString().trim().split("\\s+");
StringBuilder result = getLine(mas);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) throws InterruptedException {
StringBuilder result = new StringBuilder();
if (words == null) {
return result;
}
List<String> list = new LinkedList();
for (String a : words) {
list.add(a);
}
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String a : list) {
// System.out.println(a);
}
boolean first = true;
boolean deleted = false;
boolean aPlus = true;
boolean exit = false;
boolean withoutPair = true;
List<String> extraWords = new LinkedList<>();
List<String> extraWords2 = new LinkedList<>();
String lastElement;
int a = 0;
while (a < list.size() && a > -1) {
if (exit == true) break;
// System.out.println("I'll take element " + list.get(a) + " for the next step;");
// System.out.println("This is your current list;");
for(String h:list){
// System.out.println(h);
}
// System.out.println(" ");
String end = list.get(a).substring(list.get(a).length() - 1).toLowerCase();
for (int b = 0; b < list.size(); b++) {
// Thread.sleep(100);
// System.out.println("\n" + " STEP a = " + a + " b = " + b + " ... " );
String start = list.get(b).substring(0, 1).toLowerCase();
if (a != b && end.equals(start) && first == true) {
withoutPair = false;
// System.out.println("I've found matching pairs!;");
aPlus = false;
first = false;
// System.out.println("I'll add elements " +list.get(a)+ " and " + list.get(b) + " to result;");
result.append(list.get(a) + " ").append(list.get(b) + " ");
// System.out.println("This element will be deleted - " + list.get(a) + ";");
list.remove(a);
deleted = true;
// System.out.println("This is a list after deleting;");
for(String h:list){
// System.out.println(h);
}
a = b - 1;
b = 0;
// System.out.println("This is the current result: " + result.toString() + ";");
// System.out.println("This element will be taken for the next step! " + list.get(a) + ";");
break;
} else if (a != b && end.equals(start) && first == false) {
withoutPair = false;
// System.out.println("I've found matching pairs!");
// System.out.println("I'll add element " + list.get(b) + " to result;");
result.append(list.get(b) + " ");
aPlus = false;
// System.out.println("This element will be deleted - " + list.get(a) + ";");
list.remove(a);
deleted = true;
// System.out.println("This is a list after deleting:");
for(String h:list){
// System.out.println(h);
}
if (a > b) {
a = b;
} else if (a <= b) {
a = b - 1;
}
b = 0;
// System.out.println("This is the current result: " + result.toString()+ ";");
// System.out.println("This element will be taken for the next step! " + list.get(a)+ ";");
break;
} else if (deleted == true && b == list.size() - 1) {
// System.out.println("HO HO HO I'll add the next words to the list");
if(withoutPair==false) {
// System.out.println("Element " + list.get(a) + " will be deleted! LOL!");
list.remove(a);
}
else{
// System.out.println("Element " + list.get(a) + " added to extraWords2 List");
extraWords2.add(list.get(a));
// System.out.println("Element " + list.get(a) + " will be deleted! LOL!");
list.remove(a);
}
withoutPair=true;
first = true;
for(String extra:extraWords){
// System.out.println(extra);
list.add(extra);
}
for(int extra = 0; extra<extraWords.size();extra++){
extraWords.remove(0);
}
// System.out.println("HO HO HO Let's try to sort the list one more time!!!");
Collections.sort(list);
aPlus = true;
a=-1;
if(a==list.size()-1){
for (String extra:extraWords){
result.append(extra + " ");
}
for (String extra:extraWords2){
result.append(extra + " ");
}
exit=true;
}
}
}
if (deleted == false && a >= 0) {
// System.out.println("There aren't matching letters, element " + a+"."+ list.get(a) + " will be deleted and added to extraWords List!;");
extraWords.add(list.get(a));
list.remove(a);
a--;
// System.out.println("\"a\" after deleting equals " + a+ ";");
}
if (aPlus == true) {
a++;
// System.out.println("\"a\" has been increased, it's equals " + a+ ";");
}
}
result = new StringBuilder(result.toString().trim());
return result;
}
}