まず接尾辞配列に元の文字列の位置を前に、その接尾辞配列
カウントユニークなストリングのためのlongest common prefix配列を作成します。例えば
、文字列は「ABABA」、その接尾辞配列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
,およびABA
は、sa[2]
に属する。しかし、最初の部分文字列が繰り返されます。
A
,,ABA
,ABAB
,ABABA
はsa[3]
に属する。しかし、最初の3つの部分文字列が繰り返されます。
文字列全体が接尾辞配列で#n
位にランクされてあれば、答えは次のようになります。
\sum_{i=1}^{n} length(sa[i]) - height[i]
だから、「ABABA」の答えは1+3+5-1-3=5
です。
この問題のソースコード全体をhereにすることができます。完全にはテストされていませんが、動作するはずです。
"ABABA"の回答はどうですか?それは5ですか? – xmcp
はい、ランクは5になります。 –