【发布时间】:2014-01-09 16:41:50
【问题描述】:
如何找到lexicographically minimal string rotation的号码?
例如:
S = abab, N = 2 S = abca, N = 1 S = aaaa,N = 4我尝试了 Duval 的算法,它的工作时间很长。字符串长度为100000000个字符。
【问题讨论】:
-
我不认为你想要字典上最小的字符串旋转,而是周期性字符串的周期。 stackoverflow.com/questions/8347812/…
-
旋转次数是什么意思?每一轮都有编号吗?转数是多少?你不想要总旋转次数(rotationS - 复数)吗?
-
Duval 的算法适用于
O(N)和O(1)内存要求。如果这对你来说似乎很慢,放弃它,不会有更快的!程序至少需要读取整个字符串,这给出了最短时间O(N)! -
你叫什么很长?你是如何实施的?使用什么语言?正确编码和优化,10^8 个元素的线性时间算法应该需要几秒钟。
-
@Tomas O(N) 并不意味着没有比这更快的了。可能还有另一种算法,其复杂度为 O(N),执行时间快 100 倍。
标签: string algorithm circular-buffer