Программа Java для проверки строки палиндрома

Научитесь проверять, является ли заданная строка строкой-палиндромом, с помощью простых программ Java, использующих стек, очередь или простые циклы. Проще говоря, строка является палиндромом, если она равна своей обратной строке.

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

1. Алгоритм

1.1 Первый подход

Чтобы проверить палиндром, мы можем выбрать символы(по одному) из начала и конца строки и начать сравнивать их друг с другом.

  • Выберите первый и последний символы строки и сравните. Если оба совпадают – продолжайте. Иначе строка не является палиндромом.
  • Выберите второй символ из начала и конца, сравните оба. Если оба совпадают – продолжайте. Иначе строка не является палиндромом.
  • Продолжайте указанные выше сравнения до тех пор, пока оба сравниваемых символа не станут одинаковыми или последовательными друг за другом.

1.2 Второй подход

Вместо того, чтобы сравнивать символы с начала и конца, мы также можем найти обратную строку данной строки и сравнить обе строки. Если обе строки одинаковы, они являются палиндромом.

  • Получить массив символов из заданной строки
  • Построить строку, перебирая массив от конца до начала индекса
  • По желанию – удалите запятые, разделители или другие разделители слов из обеих строк.
  • Сравните обе строки

В этом уроке мы рассмотрим примеры обоих подходов.

2. Проверьте палиндром с помощью обратного сравнения

Этот метод использует первый подход, описанный выше.

import java.util.Scanner;public class Main{public static void main(String[] args) {System.out.print("Enter any string : ");Scanner in = new Scanner(System.in);//Original stringString origString = in.nextLine();int length = origString.length();boolean isPalindrome = true;for(int beginIndex = 0; beginIndex < length; beginIndex++){if(origString.charAt(beginIndex) != origString.charAt(length-1-beginIndex)) {System.out.println("String is not a palindrome.");isPalindrome = false;break;}}if(isPalindrome) {System.out.println("String is a palindrome.");}}}
Enter any string : howtodoinjavaString is not a palindrome.Enter any string : madamString is a palindrome.

3. Проверьте палиндром с помощью StringBuilder.reverse()

Метод StringBuilder.reverse() — это кратчайший способ перевернуть строку с помощью библиотечных функций.

import java.util.Scanner;public class Main{public static void main(String[] args) {System.out.print("Enter any string : ");Scanner in = new Scanner(System.in);//Original stringString origString = in.nextLine();//Reverse stringString reverseString = new StringBuilder(origString).reverse().toString();// Check palindrome stringif(origString.equals(reverseString)) {System.out.println("String is a palindrome.");} else {System.out.println("String is not a palindrome.");}}}
Enter any string : howtodoinjavaString is not a palindrome.Enter any string : madamString is a palindrome.

4. Проверьте строку-палиндром с помощью java.util.Stack

Используя методы push() и pop() стека, мы можем построить обратную строку для заданной строки. Затем мы сравниваем обе строки.

import java.util.Scanner;import java.util.Stack;public class Main{public static void main(String[] args){System.out.print("Enter any string : ");Scanner in = new Scanner(System.in);String origString = in.nextLine();Stack<Character> stack = new Stack<>();//Push all chars in stackfor(int i = 0; i < origString.length(); i++) {stack.push(origString.charAt(i));}String reverseString = "";//Pop all chars from stack one by one and build reverse stringwhile(!stack.isEmpty()) {reverseString = reverseString + stack.pop();}//Check palindrome stringif(origString.equals(reverseString)) {System.out.println("String is a palindrome.");} else {System.out.println("String is not a palindrome.");}}}
Enter any string : howtodoinjavaString is not a palindrome.Enter any string : racecarString is a palindrome.

5. Проверьте строку-палиндром с помощью java.util.Queue

Используя методы Queue add() и remove(), мы можем построить обратную строку для заданной строки. Затем мы сравниваем обе строки.

import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main{public static void main(String[] args){System.out.print("Enter any string : ");Scanner in = new Scanner(System.in);String origString = in.nextLine();Queue<Character> queue = new LinkedList<>();for(int i = origString.length()-1; i >=0; i--) {queue.add(origString.charAt(i));}String reverseString = "";//Pop all chars from stack one by one and build reverse stringwhile(!queue.isEmpty()) {reverseString = reverseString + queue.remove();}//Check palindrome stringif(origString.equals(reverseString)) {System.out.println("String is a palindrome.");} else {System.out.println("String is not a palindrome.");}}}
Enter any string : howtodoinjavaString is not a palindrome.Enter any string : racecarString is a palindrome.

6. Проверьте строку-палиндром с помощью циклов

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

import java.util.Scanner;public class Main{public static void main(String[] args){System.out.print("Enter any string : ");Scanner in = new Scanner(System.in);String origString = in.nextLine();String reverseString = "";char[] characters = origString.toCharArray();for( int i = characters.length - 1 ; i >= 0 ; i-- ) {reverseString = reverseString + characters[i];}//Check palindrome stringif(origString.equals(reverseString)) {System.out.println("String is a palindrome.");} else {System.out.println("String is not a palindrome.");}}}
Enter any string : waterString is not a palindrome.Enter any string : madamString is a palindrome.

Напишите мне ваши вопросы, связанные с проверкой того, является ли заданная строка палиндромом или нет в Java.

Прокрутить вверх