Суффиксный массив / суффиксное дерево с числами

Могут ли суффиксные деревья или суффиксные массивы эффективно использоваться с числами?

Например:

Можно ли использовать с массивом [1,2,3,4,5,3,9,8,5,3,9,8,6,4,5,3,9,11,9,8,7,11] извлечь все возможные непересекающиеся повторяющиеся подстроки всех размеров из содержимого массива? Если да, не могли бы вы предоставить реализацию для того же. Я пытаюсь достичь того же, но не нашел эффективного решения.

Ожидаемые результаты:

4,5
4,5,3
4,5,3,9
5,3
5,3,9
5,3,9,8
...

Учитывая массив: [1,2,3,4,5,9,3,4,5,9,3,3,4,5,9,3]неперекрывающаяся повторяющаяся последовательность подразумевает, что извлеченная группа:3,4,5,9,3 получается из повторений, начиная с индексов 2-6 и 11-15, а НЕ 6-10

1 ответ

Вот

public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5, 3, 9, 8, 5, 3, 9, 8, 6, 4, 5, 3, 9, 11, 9, 8, 7, 11}; // expect : 2,3  /  2,3,4  /  3,4
    Set<String> strings = new HashSet<>();
    // for every position in the array:
    for (int startPos = 0; startPos < arr.length; startPos++) {

        // from the actual position + 1 to the end of the array
        for (int startComp = startPos + 1; startComp < arr.length; startComp++) {
            int len = 0; // length of the sequence
            String sum = "";
            // while not at the end of the array, we compare two by two
            while (startComp + len < arr.length && arr[startPos + len] == arr[startComp + len]) {
                sum += arr[startPos + len];
                // if detected sequence long enough
                if (len > 0) {
                    strings.add(sum);
                }
                len++;
            }
            // just to gain some loop
            startComp = startComp + len;
        }
    }
}

Для ваших данных, мои результаты:

98 453 4539 45 5398 539 398 53 39

По сути, цикл через ваш массив. Буква Foreach сравнивается с каждой буквой справа. Если вы найдете ту же букву, сравните растущую последовательность и добавьте ее в набор, если ее длина>1.

Надеюсь, поможет

Другие вопросы по тегам