Ответ 1
Как и раньше, ваше дерево неверно.
Это то, что я получаю при запуске "ABCDE $XABCZ" через свой код.
String = ABCDE$XABCZ$
End of word character 1 = $
└── (0)
├── (20) $
├── (22) ABC
│ ├── (15) DE$
│ └── (23) Z$
├── (24) BC
│ ├── (16) DE$
│ └── (25) Z$
├── (26) C
│ ├── (17) DE$
│ └── (27) Z$
├── (18) DE$
├── (19) E$
├── (21) XABCZ$
└── (28) Z$
В (компактном) дереве суффиксов вам нужно найти самые глубокие внутренние node (s), которые имеют листовые узлы из всех строк. Если у вас несколько узлов на одной и той же глубине, вам нужно сравнить длину строки, представленной этим node. то есть ABC, BC и C имеют одинаковую глубину, поэтому вам нужно сравнить длину строк ABC, BC и C, чтобы увидеть, что больше; очевидно, ABC.
└── null
├── A
│ └── B
│ └── C
│ ├── D
│ │ └── (E) ABCDE
│ └── (Z) ABCZ
├── B
│ └── C
│ ├── D
│ │ └── (E) BCDE
│ └── (Z) BCZ
├── C
│ ├── D
│ │ └── (E) CDE
│ └── (Z) CZ
├── D
│ └── (E) DE
├── (E) E
├── X
│ └── A
│ └── B
│ └── C
│ └── (Z) XABCZ
└── (Z) Z
В (некомпактном) суффиксе trie найдите самый глубокий внутренний node (s), который имеет листовые узлы из всех строк.
Надеюсь, что это поможет.