Этот вопрос был задан мне в интервью Google. Я мог бы сделать это O (n * n)... Могу ли я сделать это в лучшем случае. Строку можно сформировать только на 1 и 0.
Определение:
X и Y - строки, образованные 0 или 1
D(X,Y)
= Удалите вещи, которые обычно начинаются с X и Y. Затем добавьте оставшиеся длины из обеих строк.
Например,
D(1111, 1000)
= Только первый алфавит является общим. Таким образом, оставшаяся строка 111
и 000
. Поэтому результат length("111")
и length("000")
= 3 + 3 = 6
D(101, 1100)
= Только первые два алфавита являются общими. Таким образом, оставшаяся строка 01
и 100
. Поэтому результат length("01")
и length("100")
= 2 + 3 = 5
Довольно очевидно, что найти такое сумасшедшее расстояние будет линейным. O (м).
Теперь вопрос
для ввода n, например,
1111
1000
101
1100
Узнайте максимальное возможное расстояние.
n - количество входных строк. m - максимальная длина любой входной строки.
Решение O (n 2 * m) довольно просто. Можно ли это сделать лучше? Предположим, что m фиксировано. Можем ли мы сделать это лучше, чем O (n ^ 2)?