Xác định chuỗi có phải palindrome hay không

Các bất tử học Python cho mình hỏi thêm 1 tí về chuỗi palindrome với ạ? Mình có thực hiện 2 cách khác:

  • Cách 1 mình tạo 1 chuỗi khác để lưu chuỗi ngược.

  • Cách 2 mình xét index với giá trị lùi để thực hiện so sánh

Tuy nhiên hai cách trên đều không thỏa mãn yêu cầu là mình chỉ được dùng 1 chuỗi, và không được dùng index âm.

Mình có coi qua cách làm này, tuy nhiên mình chưa hiểu phần

nLen - i -1 lắm, tức là biết sẽ cho ra KQ nhưng mình chưa hiểu cách nó work lắm.image

Mình cảm ơn.

Ví dụ như chuỗi palindrome TENET, có 5 kí tự, thử so sánh kí tự thứ 1 với kí tự thứ 5, kí tự thứ 2 với kí tự thứ 4 thì thấy giống nhau. Hay như chuỗi anna có 4 kí tự, kí tự thứ 1 giống kí tự thứ 4, kí tự thứ 2 giống kí tự thứ 3. Chuỗi TENAT không phải là chuỗi palindrome có kí tự thứ 1 giống kí tự thứ 5, kí tự thứ 2 không giống kí tự thứ 4.

=> Một chuỗi là chuỗi palindrome <=> Cặp kí tự đầu và cuối giống nhau, cặp kí tự thứ 2 và kí tự thứ n - 1 giống nhau, cặp kí tự thứ i và kí tự thứ n - i bằng nhau (với n là chiều dài chuỗi, i <= n/2 (lấy nguyên)).

2 Likes

cach1
Em có tự giải bài này theo 2 cách thì em thấy khá oke.
Nhưng đến cách so sánh với nLen - i -1 em lại kiểu bị khựng ấy, ý em là em cứ luôn hiểu nLen -i-1 luôn là giá trị đối xứng, nhưng kiểu có cách nào chứng minh không, như kiểu chứng minh 1 định lí hay gì ấy.

Capture

  1. Viết ra hoán vị đảo ngược
  2. Suy ra từ định nghĩa chuỗi bằng nhau :smiley:

Một cách nữa là quy nạp theo độ dài.

2 Likes

Python tạo reverse string có mấy chữ à: str[::-1]. Ktra đối xứng thì str == str[::-1] là xong :triumph:

3 Likes

Em có sử dụng 3 cách.
Thì cách đầu tiên của em chính là kiểu quy nạp theo độ dài?
Kiểu giờ em biết n[i] = n[nLen - i -1] nhưng kiểu chứng minh tường minh không bằng ví dụ em hơi khó nói
Còn hình như chuỗi ngược thì em đã tự làm trong ảnh 2.

1 Like

So khớp từng kí tự thì tạo string làm gì :smiley:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?