你能否根据以下内容为循环字符串提出规范化函数:
这会将等价类(1011,1101,1110,0111)中的所有内容规范化为按字典顺序排列的最小值:0111.
0101010101 是一个棘手的实例,这个算法不会很好地运行,但如果你的位大致是随机分布的,它应该在实践中用于长字符串.
然后,您可以根据规范表单进行哈希,或者使用仅包含空字符串的trie和以0开头的字符串,单个trie运行将回答您的问题.
编辑:
如果我有一个长度为| s |的字符串 找到字典值最小的值可能需要花费大量时间.实际需要花费多少时间?
这就是为什么我说的010101....是它表现不佳的价值.假设字符串的长度为n,最长的1的长度为r.如果比特是随机分布的,则根据"最长运行的分布",最长运行的长度是O(log n).
找到最长跑的时间是O(n).您可以使用偏移量而不是缓冲区副本来实现移位,缓冲区副本应为O(1).运行次数最差情况为O(n/m).
那么,第3步的时间应该是
这导致O(n²)的最坏情况,但O(n +log²n)≅O(n)的平均情况.