Как найти наиболее часто встречающиеся подстроки в строке, используя Bash?

Пожалуйста, как решить следующую проблему:

Как найти наиболее часто встречающиеся подстроки в данной строке? Например строка:

acd0a55b171241cc13afc7135acd09d609f9e4928e18908e6f6fb5574b4ac13731f993031a13f

В этой строке есть подстроки acd0 а также c13, Также подстрока 13 и больше.

Как найти все появляющиеся подстроки, ранжированные по количеству символов в нем?

Например:

acd0: 4 символа 2 раза

c13: 3 символа 2 раза

13: 2 персонажа 2 раза!

На самом деле 13 появляется 4 раза, но уже дважды c13 и, следовательно, не допускается повторного подсчета.

Решение должно быть в Bash.

1 ответ

Вам нужно создать суффиксное дерево. Это дерево, которое содержит все повторяющиеся подстроки данной строки.

Наиболее эффективным алгоритмом для создания суффиксного дерева является алгоритм Укконена

Дополнительная информация: Быстрый поиск строк с суффиксными деревьями

В Интернете есть несколько реализаций этого алгоритма для C++ и python. Я не уверен, что было бы легко написать это непосредственно в bash, но вы можете попробовать.

Другие вопросы по тегам