【发布时间】:2013-08-10 21:55:09
【问题描述】:
如何在循环数组中查找索引,以便从该索引开始形成的字符串按字典顺序排在第一位。
例如:在循环数组 ABCDEABCCDE 答案是 6,因为从第 6 个位置的元素 A 开始的循环字符串在由循环数组的所有可能字符串组成的字典中排在第一位。
【问题讨论】:
-
你可以很容易地找到它:生成所有可能的字符串(其中会有
n,其中n是原始字符串的长度),然后简单地使用线性找到第一个搜索/选择。这两个操作都需要O(n)时间。 -
@H2CO3 :复杂性会非常大。我正在寻找 O(n) 算法。您的方法是 O(n^2)。
-
@jairaj “很大”?为什么会呢?需要
O(n)来生成子字符串,然后O(n)来搜索最小值。 (而且不管怎样,yoyu 现在是在寻找O(n)还是O(1)解决方案?您的评论与标题中的标准不符。) -
@H2CO3 如果你不小心,
O(n)会生成一个长度为n的子串,因此O(n^2)会生成所有子串。 -
@H2CO3:您究竟如何使用“线性搜索/选择”来查找字典顺序最小的字符串?除非您使用特殊技巧,否则您至少需要进行 n-1 次比较(想想锦标赛选择),每次比较可能需要 O(n) 时间。
标签: string algorithm complexity-theory circular-buffer