String 给定一个字符串,原始字符串在所有它';s唯一子串
给定一个字符串,原始字符串在其所有唯一子字符串的排序(按字典顺序)序列中的排名是多少。 示例-abc 子字符串的唯一排序序列为- a、 ab,abc,b,bc,c。所以排名应该是3。 有没有比生成所有唯一的子字符串并在排序后找到其秩更好的方法。我对这个问题使用了set stl,并且超出了时间限制。为给定字符串构建 为该后缀数组创建数组 在后缀数组中原始字符串的位置之前计算唯一的子字符串。首先,构建给定字符串的 例如,如果字符串为“ABABA”,其后缀数组String 给定一个字符串,原始字符串在所有它';s唯一子串,string,algorithm,String,Algorithm,给定一个字符串,原始字符串在其所有唯一子字符串的排序(按字典顺序)序列中的排名是多少。 示例-abc 子字符串的唯一排序序列为- a、 ab,abc,b,bc,c。所以排名应该是3。 有没有比生成所有唯一的子字符串并在排序后找到其秩更好的方法。我对这个问题使用了set stl,并且超出了时间限制。为给定字符串构建 为该后缀数组创建数组 在后缀数组中原始字符串的位置之前计算唯一的子字符串。首先,构建给定字符串的 例如,如果字符串为“ABABA”,其后缀数组sa[]和高度数组height[i]=LC
sa[]
和高度数组height[i]=LCP(sa[i],sa[i-1])
将为:
| i | sa[i] | height[i] |
| ---- | ----- | --------- |
| 1 | A | 0 |
| 2 | ABA | 1 |
| 3 | ABABA | 3 |
| 4 | BABA | 0 |
| 5 | BA | 2 |
您可以看到ABABA
之前的每个子字符串都属于后缀数组中ABABA
之前的后缀。例如:
,属于A
sa[1]
、A
和AB
属于ABA
。但是第一个子串是重复的sa[2]
,A
,AB
,ABA
,ABAB
属于ABAB
。但前3个子串是重复的sa[3]
n
,答案将是:
\sum{i=1}{n}长度(sa[i])-高度[i]
因此,“ABABA”的答案是1+3+5-1-3=5
你可以得到这个问题的全部源代码。虽然没有经过全面测试,但它应该可以正常工作。要确定的是,“ABABA”的答案是什么?是5级吗?是的,排名是5级。