Как сгруппировать строки, содержащие пути к файлам, основываясь на их сходстве? - PullRequest
0 голосов
/ 17 января 2019

Мне нужно сделать следующую группировку:

Input                                           | Output
------------------------------------------------+---------------------------------------
/opt/perl5.26.1/lib/5.26.1                      | /opt/perl5.26.1/lib/5.26.1
/opt/perl5.26.1/lib/5.26.1/warnings             | /opt/perl5.26.1/lib/site_perl/5.26.1
/opt/perl5.26.1/lib/site_perl/5.26.1/XML        | /foo/bar
/opt/perl5.26.1/lib/site_perl/5.26.1/Eval       | 
/opt/perl5.26.1/lib/site_perl/5.26.1/Class/Data |
/opt/perl5.26.1/lib/site_perl/5.26.1/FB3        |
/opt/perl5.26.1/lib/site_perl/5.26.1/HTML       |
/foo/bar/baz/qux
/foo/bar/bar
/foo/bar

Группировка должна основываться на символе-разделителе (в нашем случае это /). Мы можем разделить строку также только по ней.

Пожалуйста, помогите мне с алгоритмом или дайте мне ссылку на готовые к использованию модули на CPAN.

P.S. Я что-то думал об этом:

1) Заходим в цикл на массиве входных строк, в каждом цикле мы работаем с двумя строками

2) Найти индекс, из которого отличаются строки

3) Извлечь общую подстроку на основе индекса, передать результат в выходной массив

4) Следующая пара строк мы сравниваем не только друг с другом, но и с выходным массивом. Если на выходе уже есть строка, которая является подстрокой любой из текущей пары, мы переходим к следующей паре.

Это правильный и оптимальный алгоритм?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...