Является ли слово палиндромом java

Является ли слово палиндромом java

Я хочу проверить, является ли строка палиндром или нет. Я хотел бы изучить простой способ проверить то же самое, используя минимально возможные манипуляции с строками

11 ответов

Вы можете попробовать что-то вроде этого:

102 Jeff Foster [2011-12-09 14:27:00]

Использование reverse является излишним, потому что вам не нужно создавать дополнительную строку, вам просто нужно запросить существующий. В следующем примере проверяется, что первый и последний символы являются одинаковыми, а затем идут дальше внутри строки, проверяющей результаты каждый раз. Он возвращается, как только s не является палиндром.

Проблема с подходом reverse заключается в том, что он выполняет всю работу. Он выполняет дорогостоящее действие над строкой, затем проверяет символ по символу, пока строки не будут равны, а затем вернет false, если это не палиндром. Если вы просто сравниваете маленькие строки все время, тогда это нормально, но если вы хотите защитить себя от большего ввода, вам следует рассмотреть этот алгоритм.

Нужно определить является ли строка палиндромом. Палиндромом называется строка, которая пишется одинаково слева направо и справа налево (в том числе пустая). При определении "палиндромности" строки должны учитываться только буквы и цифры. А пробелы, знаки препинания, а также регистр символов должны игнорироваться.

Sample Input: Madam, I’m Adam!

Sample Output: true

убрать пробелы можно с помощью .replace(" ",""); а как отфильтровать строку от знаков препинания? общий код который работает на строки без знаков препинания:

5 ответов 5

Метод определяет является ли строка палиндромом. Решение в одну строчку.

  • replaceAll("\W","") : убираем из строки все не нужные символы (знаки препинания, пробелы и т.д.);
  • new StringBuilder : создаем вторую строку, но пересортированную в обратном порядке с помощью метода reverse() ;
  • equalsIgnoreCase : сравниваем их между собой, игнорируя регистр.
Читайте также:  Элт мониторы основные характеристики

Палиндром — это слово, фраза, число или другая последовательность единиц, которые могут быть прочитаны одинаково в любом направлении.

Чтобы проверить, является ли слово палиндромом, я получаю массив символов слова и сравниваю символы. Я проверил это, и это похоже на работу. Однако я хочу знать, правильно ли это или есть что-то, что можно улучшить.

30 ответов

Почему не просто

Пример:

Ввод "андна".
i1 будет 0, а i2 будет 4.

В первом цикле итерации мы сравним word[0] и word[4] . Они равны, поэтому мы увеличиваем i1 (теперь 1) и уменьшаем i2 (теперь 3).
Итак, мы затем сравним н. Они равны, поэтому мы увеличиваем i1 (теперь это 2) и уменьшаем i2 (это 2).
Теперь i1 и i2 равны (они оба равны 2), поэтому условие для цикла while больше не является истинным, поэтому цикл завершается, и мы возвращаем true.

Вы можете проверить, является ли строка палиндромом, сравнив ее с обратной стороной себя:

или для версий Java ранее, чем 1.5,

РЕДАКТИРОВАТЬ: @FernandoPelliccioni предоставил очень тщательный анализ эффективности (или его отсутствия) этого решения, как с точки зрения времени и пространства. Если вы заинтересованы в вычислительной сложности этого и других возможных решений этого вопроса, пожалуйста, прочтите его!

Краткая версия, которая не включает (неэффективно) инициализацию группы объектов:

Как вариант, рекурсия .

Для любого, кто ищет более короткое рекурсивное решение, проверить, удовлетворяет ли данная строка как палиндром:

ИЛИ еще короче , если хотите:

также другое решение:

И вот полное потоковое решение Java 8. IntStream предоставляет все индексы до половины длины строки, а затем выполняется сравнение с начала и с конца.

Проверка палиндрома на первую половину строки с остальными, этот случай предполагает удаление любых пробелов.

Читайте также:  Asus eee pc 1000h драйвера windows 7

Я работал над решением вопроса, который был помечен как дубликат этого. Можешь бросить это сюда .

Вопрос требовал единственной строки, чтобы решить эту проблему, и я воспринял это больше как литературный палиндром — так что пробелы, знаки препинания и прописные / строчные буквы могут отбрасывать результат.

Вот уродливое решение с небольшим тестовым классом:

Извините, что это противно — но другой вопрос указывал на одну строку.

Удивительно, сколько существует разных решений такой простой проблемы! Вот еще один.

Я новичок в Java, и я принимаю ваш вопрос как задачу улучшить свои знания.

  1. Если строка состоит из букв или только одной буквы, это палиндром.
  2. В противном случае сравните первую и последнюю буквы строки.
    • Если первая и последняя буквы различаются, то строка не является палиндромом
    • В противном случае первая и последняя буквы совпадают. Уберите их из строки и определите, является ли оставшаяся строка палиндромом. Возьмите ответ для этой меньшей строки и используйте его в качестве ответа для исходной строки, затем повторите процедуру с 1 .
    Ссылка на основную публикацию
    Adblock detector