Определить, сколько есть подстрок четной длины у строки S, которые являются палиндромами - Free Pascal
Формулировка задачи:
Объясните пожалуйста как решается на PASCAL ?
У Евгения есть строка S.
Он хочет узнать сколько есть подстрок четной длины у строки S, которые являются палиндромами.
Одинаковые подстроки начинающиеся с разных позиций считаются разными.
Вход-выход
abbaabaa-4
комментарии
-ab->aa<-baa
-abaab->aa<-
-ab->aab<-aa
-->abaaba<-a
Решение задачи: «Определить, сколько есть подстрок четной длины у строки S, которые являются палиндромами»
textual
Листинг программы
var s:string;
i,j,sum:integer;
function pal(x:string):boolean;
var i:integer;
flag:boolean;
begin
i:=1;flag:=true;
while (i<=length(x) div 2)and(flag) do
begin
if x[i]<>x[length(x)-i+1] then flag:=false;
inc(i)
end;
pal:=flag
end;
begin
writeln('введите строку');
readln(s);
writeln('**************');
sum:=0;
for i:=1 to length(s)-1 do
begin
j:=2;
while j<=length(s)-i+1 do
begin
inc(sum,ord(pal(copy(s,i,j))));
if pal(copy(s,i,j)) then writeln(copy(s,i,j));
inc(j,2)
end
end;
write('количество подстрок, палиндромов четной длины = ',sum);
end.
Объяснение кода листинга программы
В этом коде определен тип данных и переменные:
- Тип данных: string
- Переменная: s
- Тип данных: integer
- Переменные: i, j, sum
- Функция: pal(x:string):boolean
- Внутри функции объявлены переменные: i, flag
- Вывод сообщения для ввода строки
- Ввод строки в переменную s
- Вывод сообщения **
- Инициализация переменной sum = 0
- В цикле перебираются символы строки s
- Внутри цикла определяется переменная j
- В цикле перебираются подстроки строки s
- Внутри цикла проверяется, является ли подстрока палиндромом с помощью функции pal
- Если подстрока является палиндромом, то она выводится на экран и увеличивается значение переменной sum
- Значение переменной sum выводится на экран
- Код завершается