首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定一个字符串,在所有它的唯一子字符串的排序(字典)序列中,原始字符串的级别是多少?

给定一个字符串,在所有它的唯一子字符串的排序(字典)序列中,原始字符串的级别是多少?
EN

Stack Overflow用户
提问于 2017-08-27 14:25:19
回答 2查看 1.2K关注 0票数 2

给定一个字符串,它的所有唯一子字符串的排序(按顺序排列)中的原始字符串的等级。示例- abc唯一排序的子字符串序列是- a,ab,abc,b,bc,c。所以它的秩是3,是否有比生成所有唯一子字符串更好的方法,并在排序后找到它的秩。我用stl来回答这个问题,结果超过了时间限制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-27 14:47:46

首先,构建给定字符串的后缀数组

例如,如果字符串为"ABABA",则其后缀数组sa[]和高度数组height[i]=LCP(sa[i],sa[i-1])将为:

代码语言:javascript
复制
| 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]
  • AABABA属于sa[2]。但是第一个子字符串是重复的。
  • AABABAABABABABA属于sa[3]。但是前三个子字符串是重复的。

因此,如果整个字符串在后缀数组中被排序为#n,答案将是:

\sum_{i=1}^{n} length(sa[i]) - height[i]

所以"ABABA“的答案是1+3+5-1-3=5

您可以获得这个问题的全部源代码,这里。没有经过充分的测试,但应该是有效的。

票数 1
EN

Stack Overflow用户

发布于 2017-08-27 14:44:53

为给定字符串构建后缀数组

为该后缀数组创建最长公共前缀数组

在后缀数组中原始字符串的位置之前计数唯一的子字符串

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45906002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档