Алгоритм палиндрома в Scialb - PullRequest
0 голосов
/ 08 января 2020

Не могли бы вы помочь мне построить алгоритм в Scilab, который ищет самый длинный палиндром в последовательности ноль-один из n-элементов. В выходных данных должны быть указаны длина палиндрома и позиция в строке, начинающей искомую последовательность.

Пример: для 111010101100 самый длинный палиндром - 110101011. Длина палиндрома - 9, а позиция в строка, начинающая последовательность: 2.

1 Ответ

0 голосов
/ 09 января 2020

Вот возможная реализация (для n> 1) алгоритма, предложенного в комментарии выше:

x = "10100111000";
n = length(x);
lgmax = 0;
pos = 0;

for i = 1:n-1
    // k=0: odd sequence, k=1: even sequence
    for k = 0:1
        j=1;
        while j <= min(i-1+k,n-i) && part(x,i+j) == part(x,i-j+k)
            j = j+1;
        end
        if 2*j-1-k > lgmax
            lgmax = 2*j-1-k;
            pos = i-j+1+k;
        end
     end
 end

 disp(part(x,pos:pos+lgmax-1))
...