Понимаю код запутаный но работает. Может кто то поосоветует текст для тестировани. Не могу понять чего хочет валидатор.
Для автора этой задачи приготовлено отдельное место в аду.
package com.javarush.task.task22.task2207;
import java.io.*;
import java.util.LinkedList;
import java.util.List;
/*
Обращенные слова
*/
public class Solution {
public static List<Pair> result = new LinkedList<>();
public static void main(String[] args) {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(reader.readLine())))
){
StringBuilder str = new StringBuilder();
while(file.ready()){
str.append(file.readLine());
str.append(" ");
}
String[] strArr = str.toString().split("\\s+");
str = new StringBuilder();
for (int i = 0; i <strArr.length ; i++) {
for (int j = 0; j < strArr.length; j++) {
String str1 = strArr[i];
String str2;
if(i!=j) {
str2 = new StringBuilder(strArr[j]).reverse().toString();
if(str1.equals(str2)){
// Метод удаления совпадающих пар с масива
strArr = dellStr(strArr, i, j);
Pair pair = new Pair(str1, new StringBuilder(str2).reverse().toString());
// Проверка на уникальность пар
boolean isCon = true;
for (Pair p1 :result) {
if(p1.equals(pair))
isCon = false;
}
if(isCon)
result.add(pair);
}
}
}
}
//System.out.println(str);
for (Pair pair : result) {
System.out.println( pair.first + " " + pair.second);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static String[] dellStr(String[] inArr, int index1, int index2){
String[] dellStr = new String[inArr.length-2];
int newIndex = 0;
for (int i = 0; i <inArr.length; i++) {
if(!(i==index1 || i==index2)){
dellStr[newIndex] = inArr[i];
newIndex++;
}
}
return dellStr;
}
public static class Pair {
String first;
String second;
public Pair(){
}
public Pair(String first, String second) {
this.first = first;
this.second = second;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair pair = (Pair) o;
if (first != null ? !first.equals(pair.first) : pair.first != null) return false;
return second != null ? second.equals(pair.second) : pair.second == null;
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (second != null ? second.hashCode() : 0);
return result;
}
@Override
public String toString() {
return first == null && second == null ? "" :
first == null && second != null ? second :
second == null && first != null ? first :
first.compareTo(second) < 0 ? first + " " + second : second + " " + first;
}
}
}