Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Palindrome trong Python: Cách kiểm tra số/chuỗi đối xứng


Palindrome (Chuỗi đối xứng) là gì?

Một palindrome là chuỗi giống hệt nhau khi đọc từ trái sang phải hoặc từ phải sang trái. Nói cách khác, chuỗi palindrome là chuỗi mà đảo ngược của nó bằng chính chuỗi gốc.

Ví dụ: civic, madam là palindrome.

Cat không phải palindrome. Vì đảo ngược là tac, không bằng chuỗi gốc cat.

Viết chương trình kiểm tra chuỗi đầu vào có phải palindrome hay không.

Phương pháp 1 – Tìm chuỗi đảo ngược

  • Chính việc cần làm là tìm chuỗi đảo ngược.
  • Đảo ngược có thể tìm bằng nhiều cách. Dùng phương pháp slicing đơn giản: s[::-1]. Cũng có thể dùng ''.join(reversed()). Dù có cách khác, ta dùng cách đơn giản.
  • So sánh chuỗi đảo ngược với chuỗi gốc.
  • Trả về True nếu bằng nhau, ngược lại False.

Ví dụ

def isPalindrome(s):
    rev = s[::-1]
    if rev == s:
        return True
    return False

print("Nhập chuỗi:")
st = input()
print(isPalindrome(st))

Kết quả

Nhập chuỗi
madam
True

Phương pháp 2 – Không tìm chuỗi đảo ngược

Ý tưởng: liên tục so sánh ký tự ở chỉ số đầu và cuối cho đến khi không bằng nhau.

Xem hai ví dụ không tìm chuỗi đảo ngược:

Chuỗi "madam":

  • So sánh ký tự đầu và cuối: bằng nhau. Tiếp tục so sánh ký tự thứ 2 và倒数 thứ 2: bằng nhau. Cuối cùng chỉ còn 1 ký tự. Do đó chuỗi là palindrome.

Chuỗi "reader":

  • Các ký tự bằng nhau cho đến so sánh giữa ký tự thứ 2 và倒数 thứ 2.
  • Khi so sánh ký tự thứ 3 và倒数 thứ 3, chúng không bằng, do đó không phải palindrome.
  • Có thể triển khai ý tưởng này bằng đệ quy (recursion) hoặc hai con trỏ (two pointers). Sử dụng hai con trỏ. Bắt đầu con trỏ start tại 0 và end tại chỉ số cuối. So sánh, nếu bằng nhau, tăng start và giảm end (đưa chúng đến ký tự thứ 2 và倒数 thứ 2, v.v.).
  • Khi trả về False? Nếu tìm thấy cặp con trỏ không bằng, không cần xem thêm, trả về False.
  • Khi trả về True? Nếu chuỗi là palindrome, trả về True khi hai con trỏ bằng nhau (chỉ còn 1 ký tự) hoặc start vượt quá end (đã kiểm tra hết ký tự).

Ví dụ

def isPalindrome(s):
    rev = s[::-1]
    if rev == s:
        return True
    return False

print("Nhập chuỗi:")
st = input()
print(isPalindrome(st))

Kết quả

Nhập chuỗi
reader
False
Nhập chuỗi
madam
True