Re: Задачки с Amazon SDE Interview
От: Буравчик Россия  
Дата: 12.12.20 11:05
Оценка:
Здравствуйте, Chriso, Вы писали:

C>2. Дан список последовательностей чисел

C>Найти самую часто встречающуюся непрерывную подпоследовательность и сколько раз она встречается.
C>Облегчённый вариант, с которым я также не справился: длина подпоследовательности задана, рассматривать только подпоследовательности этой длины.
C>Очевидное решение с Dictionary, где ключом является сама подпоследовательность не подходит по требуемой памяти, даже в "облегчённом" варианте. Предполагается, что список читается из файла и в память не влезет.

C>Пример:

C>вход [[1, 2, 3, 4], [4, 2, 3, 1]]
C>выход [2, 3], 2

C>вход [[1, 2, 3, 4], [4, 2, 3, 2, 3]]

C>выход [2, 3], 3

Думаю, так:

Надо объединить все входящие последовательности в одну большую, заменяя промежутки между последовательностями специальным символом ($).
Теперь у нас стоит задача поиска наиболее часто повторяющейся подстроки в строке.

Для этого нужно построить суффиксное дерево (что само по себе не просто).
При построении дерева нужно для каждого узла запоминать количество его вхождений в строку.
Потом найти в дереве наиболее глубокий узел по количеству символов, считая от корня. Это и будет ответ.

P.S. Да уж, задачи — жесть. В условиях малого времени сделать сложно
Best regards, Буравчик
Отредактировано 12.12.2020 11:10 Буравчик . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.