Мне нужно сделать следующую группировку:
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) Следующая пара строк мы сравниваем не только друг с другом, но и с выходным массивом. Если на выходе уже есть строка, которая является подстрокой любой из текущей пары, мы переходим к следующей паре.
Это правильный и оптимальный алгоритм?