MaxLich, это уже элементы реализации, как Вам проще так и делайте. Но лично мне показалось, что хранить номера строк избыточно, чтобы потом по этим номерам получать сами строки. Надеюсь Вы уловили один из возможных алгоритмов реализации этой задачи.
По ключу в мапе для каждой колонки хранится не номер строки, а список строк.
Берете первый ключ первой колонки. Получаете список строк (по первой мапе)
В вашем примере по ключу 'a' первой мапы (которая хранит ключи для первого стоблца) достаете список строк:
a;b;c
a;d;e
a;o;w
Ключи 'b' , 'd' и 'o' предназначены для поиска во второй мапе (которую вы должны были прежде сформировать). Также, на этом этапе можно получить ключи для 3 мапы. Это 'c' , 'e' и 'w'. Проделываете это до тех пор, пока находятся ключи и пока текущая строка не является посещенной.
Перебором посещаете каждый полученный ключ для соотвествующей мапы. Формируете группы.
Одинаковые строки записываете, их больше одного раза не посещаете.
MaxLich, почему бессмысленно? Это и есть задание, если один элемент одной колонки хранится в разных строках, то они составляют одну группу.
Вы берете первый ключ первой колонки, получаете список строк. Получаете строку, вынимаете ключи для второй колонки. И проверяете уже по второй мапе по полученным ключам, и проделать так же для третьей мапы.
MaxLich, да, нужно выполнить поиск в глубину (или ширину).
У Вас есть список ключей первой колонки, берете первый ключ, получаете список ассоциированных строк, сначала например из второй мапы по каждому второму значению полученных строк. Смотрите, есть ли строки, если есть, добавляете их в группу. Проходите, пока есть возможность проверять полученные значения по ключам n-ой колонки в мапах других колонок (для 1 мапы это 1-ые слова, для 2 мапы это 2-ые слова, для 3 мапы это 3-и слова строки). Необходимо также завести сет из посещенных строк, чтобы одни и те же строки не посещать.
MaxLich, Вы не сделали то, о чем было указано мною выше, а именно, необходимо сформировать 3 мапы по колонкам.
В вашем примере, для первой мапы, по ключу 'a' должна лежать коллекция строк ->
a;b;c
a;d;e
a;o;w
по ключу
'x' -> x;y;z.
И так далее, по аналогии для каждого элемента каждой колонки. Смысла в том, чтобы делать так, как сделали Вы, я не вижу.
MaxLich, Так и есть, нужно сформировать 3 мапы для каждой колонки, где ключом будет являться n-ый элемент колонки, а значением - коллекция строк, в которых данный ключ совпал. Далее, необходимо выполнить поиск в глубину.
Колонки в сеты кидать не вижу смысла, когда я делал это задание, я написал свой класс, который представлял строку и имел три строковых поля. По сету, который включал в себя экземпляры данного класса , я строил те самые три мапы.