这个问题是在谷歌面试时问我的。我可以做到 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
很明显,确实发现如此疯狂的距离将是线性的。(米)。
现在的问题是
给定 n 个输入,比如说
1111
1000
101
1100
找出可能的最大疯狂距离。
n 是输入字符串的数量。m 是任何输入字符串的最大长度。
O(n 2 * m) 的解决方案非常简单。可以以更好的方式完成吗?假设 m 是固定的。我们能比 O(n^2) 做得更好吗?