era*_*ros 2 sorting string algorithm
我想对字符串的旋转进行排序.
例如:
因为S = 'abaeb'
,轮换可以'baeba'
我需要获取索引列表S
,按字典顺序排序.
在我们的例子中:V = 02413
.
答案必须排除琐碎的矩阵行排序.
只需将字符串附加到自身bbaeb
就可以了bbaebbbaeb
(对于涉及字符串旋转的问题,这是一个方便的技巧).
查找后缀数组.
遍历它并仅选择小于orignal string(5)长度的值.上面字符串的后缀数组
aeb 7
aebbbaeb 2
b 9
baeb 6
baebbbaeb 1
bbaeb 5
bbaebbbaeb 0
eb 8
ebbbaeb 3
S = 7 2 7 6 1 5 0 4 8 3
Run Code Online (Sandbox Code Playgroud)
现在跟随Ans = 2 1 0 4 3
您可以使用Suffix数组在O(n)时间复杂度下解决它.基本上字符串的后缀数组包含字典顺序中字符串的所有后缀的索引.
对于字符串abaeb,字典顺序中的后缀为:
abaeb (0)
aeb (2)
b (4)
baeb (1)
e (3)
Run Code Online (Sandbox Code Playgroud)
所以后缀数组 S=02413
具有O(n log ^ 2n)时间复杂度的代码在该链接处给出,具有详细说明,并且下一页具有针对O(n)的优化.如果您想保持代码简单,那么使用已经回答的比较运算符是关键.如果您主要关心的是效率,那么使用o(n)后缀数组构造.
归档时间: |
|
查看次数: |
356 次 |
最近记录: |