Палиндром - это слово, фраза, число или другая последовательность единиц, которые могут быть прочитаны одинаково в любом направлении.
Чтобы проверить, является ли слово палиндромом, я получаю массив символов слова и сравниваю символы. Я протестировал это, и, кажется, это работает. Однако я хочу знать, правильно ли это или есть что улучшить.
Входные данные - "andna". i1 будет равно 0, а i2 - 4.
Первую итерацию цикла мы сравним word[0] и word[4]. Они равны, поэтому мы увеличиваем i1 (теперь это 1) и уменьшаем i2 (теперь это 3). Затем мы сравниваем n. Они равны, поэтому мы увеличиваем i1 (теперь это 2) и уменьшаем i2 (это 2). Теперь i1 и i2 равны (они оба равны 2), поэтому условие для цикла while больше не выполняется, поэтому цикл завершается, и мы возвращаем true .
Ответ 2
Вы можете проверить, является ли строка палиндромом, сравнив ее с обратной ей:
РЕДАКТИРОВАТЬ: @FernandoPelliccioni предоставил очень тщательный анализ эффективности (или ее отсутствия) этого решения, как с точки зрения времени, так и с точки зрения пространства. Если вас интересует вычислительная сложность этого и других возможных решений этого вопроса, пожалуйста, прочтите его!
Ответ 3
Краткая версия, которая не требует (неэффективно) инициализации множества объектов:
booleanisPalindrome(String str) { intn= str.length(); for( inti=0; i < n/2; i++ ) if (str.charAt(i) != str.charAt(n-i-1)) returnfalse; returntrue; }
Ответ 4
В качестве альтернативы, рекурсия.
Для всех, кто ищет более короткое рекурсивное решение, чтобы проверить, удовлетворяет ли данная строка палиндрому:
if (length < 2) // If the string only has 1 char or is empty returntrue; else { // Check opposite ends of the string for equality if (s.charAt(0) != s.charAt(length - 1)) returnfalse; // Function call for string with the two ends snipped off else return isPalindrome(s.substring(1, length - 1)); } }