Ссылка на оригинальную статью
Ссылка на рабочий код
Ссылка на e-olymp
Задача
Палиндром — это строка, которая одинаково читается слева направо и справа налево. Составьте программу, которая проверяет, является ли заданный текст палиндромом. Не забудьте, что при чтении пробел никак не произносится.
Входные данные
Дана строка [latex]S[/latex], [latex]|S| \leq 255[/latex], состоящая из строчных латинских букв и пробелов. Под [latex]|S|[/latex] подразумевается длина строки
Выходные данные
Вывести «Yes», если текст является палиндромом, и «No», если не является.
Тесты
Входные данные | Выходные данные |
---|---|
a roza upala na lapu azora | Yes |
my gym | Yes |
palindrom | No |
character | No |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Main { static function main() { var line = Sys.stdin().readLine(); var lineWithoutSpaces = StringTools.replace(line, " ", ""); var ok:Bool = true; for (i in 0...lineWithoutSpaces.length) { var j = lineWithoutSpaces.length - i - 1; if (lineWithoutSpaces.charAt(i) != lineWithoutSpaces.charAt(j)) { ok = false; break; } } Sys.stdout().writeString((ok ? "Yes" : "No") + "\n"); } } |
Решение
Со входного потока считываем строку. Так как пробелы не должны учитываться, то легче будет работать со строкой без пробелов. Поэтому, пользуясь пространством имен StringTools, заменим все вхождения пробелов на пустые строки (инчае говоря, удалим все пробелы). Флаг ok в конце будет использован для вывода соответствующего сообщения. В цикле поочередно проверяем на равенство противоположные элементы строки. В случае единого несовпадения устанавливаем флаг в false и останавливаем цикл. Выводим сообщение в выходной поток.