Проблема состоит в том, чтобы найти длину самой короткой уникальной подстроки и количество уникальной подстроки той же длины, встречающейся в строке. Например, «aat cc» будет иметь «t» в качестве уникальной подстроки самой короткой длины, а длина равна 1, поэтому выходные данные будут 1,1. Другой пример - «aa cc», здесь вывод будет равен 2,3, так как строки aa, a c, cc
Я пытался решить эту проблему, но мог придумать только грубую силу решение, которое должно l oop по всем возможным подстрокам. Превышен лимит времени.
Я гуглил его и нашел некоторые ссылки на суффиксный массив, но не совсем ясно об этом. Итак, каково оптимальное решение для этой проблемы?
РЕДАКТИРОВАТЬ : Забыл упомянуть ключевое требование решения, которое требовалось для этой проблемы, а именно НЕ используйте любые библиотечные функции, кроме функций ввода и вывода, для чтения и записи со стандартного ввода и на стандартный вывод и соответственно на него.
РЕДАКТИРОВАНИЕ : я нашел другое решение, используя tr ie структура данных.
Pseudocode:
for i from 1 to length(string) do
for j from 0 to length(string)-1 do
1. create a substring of length i from jth character
2. if checkIfSeen(substring) then count-- else count++
close inner for loop
if count >= 1 then break
close outer for loop
print i(the length of the unique substring), count (no. of such substrings)
checkIfSeen(Substring) will use a trie data structure which
will run O(log l) where l is the average length of the prefixes.
Сложность по времени этого алгоритма будет O (n ^ 2 log l), где, если средняя длина префиксов равна n / 2, тогда сложность по времени будет O (n ^ 2 журнал n). Пожалуйста, укажите на ошибки, если есть, а также, если возможно, на то, чтобы улучшить время выполнения.