Проверял на таких данных:
рот тор торт о
о тот тот тот
Вывод:
рот тор
о о
тот тот
asd dsa ads sda
qqqw wqqq asd eq jkl
aidpo iop
iop
asd dsa ads sda
qqqw wqqq asd eq jkl
aidpo iop
ada ada ada ada
poi
Вывод:
asd dsa
ads sda
qqqw wqqq
iop poi
ada ada
Никак не догоняю в чем проблема, ведь все, как мне кажется, сходится:/package com.javarush.task.task22.task2207;
import java.io.*;
import java.util.*;
/*
Обращенные слова
*/
public class Solution {
public static List<Pair> result = new LinkedList<>();
public static void main(String[] args) {
String fileName = "";
List<String> stringTokens = new ArrayList<>();
try (BufferedReader is = new BufferedReader(new InputStreamReader(System.in))) {
fileName = is.readLine();
} catch (IOException ignored) {
}
try (BufferedReader file = new BufferedReader(new FileReader(fileName))) {
while (file.ready()) {
String[] tokens = file.readLine().split("\\p{Z}+");
stringTokens.addAll(Arrays.asList(tokens));
}
} catch (IOException ignored) {
}
List<Pair> tempList = new ArrayList<>();
// Удаляем все пустые строки
stringTokens.removeIf(next -> next.equals(""));
for (String stringToken : stringTokens) {
StringBuilder token = new StringBuilder(stringToken);
if (stringTokens.contains(token.reverse().toString())) {
Pair pair = new Pair();
pair.first = stringToken;
pair.second = token.toString();
Pair reversePair = new Pair();
reversePair.first = pair.second;
reversePair.second = pair.first;
// Есть нет ни обычной, ни инвертированной пары, то добавляем
if (!tempList.contains(pair) && !tempList.contains(reversePair)) {
tempList.add(pair);
}
}
}
for (Pair pair : tempList) {
// System.out.printf("%s %s%n", pair.first, pair.second);
result.add(pair);
System.out.println(pair);
}
}
public static class Pair {
String first;
String 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 :
second == null ? first :
first.compareTo(second) < 0 ? first + " " + second : second + " " + first;
}
}
}