Тема: Довгий паліндром
Зенику задано рядок S, який складається з N англійських літер. Потрібно допомогти йому порахувати довжину найбільшого підрядка, який є паліндромом.
Вхідні дані:
В першому рядку задане одне ціле число N - розмір рядка.
В другому задано рядок S який складається з N малих англійських літер.
Вихідні дані: в єдиному рядку вивести довжину найбільшого підрядка S, який є паліндромом.
Обмеження: 1<=N<=7000
Пробний тест:
N=6
S=banana
Результат: 5
Я написав код який на алготестері проходить лише для 10 тестів. Розумію, що при великих кількостях символів він є неефективним. Чув що можна оптимізувати використовуючи алгоритм Манакера про не розумію як це зробити. Ось мій код:
type mas=array[1..7000] of char;
var
s:mas; palindrom:boolean;
i,j,mx,n,k,m:integer;
begin
readln(n);
for i:=1 to n do
read(s[i]);
if n<2 then
mx:=1
else
begin
mx:=1;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
palindrom:=true;
k:=i;
m:=j;
while k<m do
begin
if s[k]<>s[m] then
palindrom:=false;
k:=k+1;
m:=m-1
end;
if (palindrom=true) and (j-i+1>mx) then
mx:=j-i+1;
end;
end;
write(mx);
end.