Palindrome là gì?

Adjective Programming
Xuôi ngược

Xuôi ngược (palindrome) là một số, tổ hợp chữ cái, từ hoặc văn bản đọc giống nhau theo cả hai hướng. Tóm lại, một palindrome có thể được gọi là bất kỳ tập hợp ký tự nào đối xứng ở giữa của nó. Từ này có nguồn gốc từ tiếng Hy Lạp có nghĩa đen là “chạy trở lại” (palin là "một lần nữa, quay lại" và dromos, "chạy".).

Các ví dụ về palindrome như:

  • 1881
  • aaqquqqaa
  • pop
  • Noon
  • Rotator
  • Madam I am Adam
  • My Gym
  • Now, sir, a war is won!

1881 là một số xuôi ngược (palindrome number) và những cái khác là chuỗi xuôi ngược (palindrome string).

Ví dụ về mã thuật toán kiểm tra chuỗi có phải là xuôi ngược (palindrome) hay không:

Để kiểm tra một Palindrome trong Java, trước tiên, chúng ta đảo ngược (reverse) chuỗi hoặc số và so sánh chuỗi hoặc số đã đảo ngược với giá trị ban đầu.


class Main {
  public static void main(String[] args) {

    String str = "Radar", reverseStr = "";
    
    int strLength = str.length();

    for (int i = (strLength - 1); i >=0; --i) {
      reverseStr = reverseStr + str.charAt(i);
    }

    if (str.toLowerCase().equals(reverseStr.toLowerCase())) {
      System.out.println(str + " is a Palindrome String.");
    }
    else {
      System.out.println(str + " is not a Palindrome String.");
    }
  }
}

Output:


Radar is a Palindrome String.

Trong ví dụ trên, chúng ta có một chuỗi "Radar" được lưu trữ trong str. Ở đây, chúng ta đã sử dụng

1. vòng lặp for để đảo ngược chuỗi

  • Vòng lặp chạy từ cuối đến đầu chuỗi.
  • Phương thức charAt() truy cập từng ký tự của chuỗi.
  • Mỗi ký tự của chuỗi được truy cập theo thứ tự ngược lại và được lưu trữ trong reverseStr.

2. câu lệnh (statement) if để so sánh str và reverseStr

  • Phương thức toLowerCase() chuyển đổi cả str và reverseStr thành chữ thường (lowercase). Điều này là do Java phân biệt chữ hoa chữ thường (case sensitive) và 'r' và 'R' là hai giá trị khác nhau.
  • Phương thức equals() kiểm tra xem hai chuỗi có bằng nhau hay không.

Ví dụ về mã thuật toán kiểm tra số có phải là xuôi ngược (palindrome) hay không:


class Main {
  public static void main(String[] args) {
    
    int num = 3553, reversedNum = 0, remainder;
    
    // store the number to originalNum
    int originalNum = num;
    
    // get the reverse of originalNum
    // store it in variable
    while (num != 0) {
      remainder = num % 10;
      reversedNum = reversedNum * 10 + remainder;
      num /= 10;
    }
    
    // check if reversedNum and originalNum are equal
    if (originalNum == reversedNum) {
      System.out.println(originalNum + " is Palindrome.");
    }
    else {
      System.out.println(originalNum + " is not Palindrome.");
    }
  }
}

Output:


3553 is Palindrome.

Trong ví dụ trên, chúng ta có một số 3553 được lưu trữ trong các biến num và originalNum. Ở đây, chúng ta đã sử dụng

  • Vòng lặp while để đảo ngược num và lưu trữ số đã đảo ngược trong reverseNum
  • if...else để kiểm tra xem giá trị được đảo ngược có giống với giá trị ban đầu không
Learning English Everyday