如何获得非重复子串的总数?

时间:2016-12-29 03:15:32

标签: c++ string algorithm

假设我有string str = "aabaa"

它的非重复子串是

  1. 一个
  2. B'/ LI>
  3. AA
  4. AB
  5. BA
  6. AAB
  7. ABA
  8. BAA
  9. AABA
  10. ABAA
  11. aabaa

2 个答案:

答案 0 :(得分:3)

  1. 计算suffix array及其最长公共前缀数组。

    a
     1
    aa
     2
    aabaa
     1
    abaa
     0
    baa
    
  2. 返回(n+1)n/2,子串边界的数量减去最长公共前缀数组的总和。

    (5+1)5/2 - (1+2+1+0) = 15 - 4 = 11.
    

答案 1 :(得分:1)

这个特殊的问题在许多比赛中被提出并且可以以不同的方式解决,但是在比赛中接受它是时间和空间复杂性的问题。 您可以在以下链接中找到解决方案:     Generate all unique substrings for given string

https://www.quora.com/Given-a-string-how-do-I-find-the-number-of-distinct-substrings-of-the-string