🎯 Mục tiêu
- Hiểu chuỗi đối xứng (Palindrome).
- Biết cách kiểm tra và tìm chuỗi đối xứng dài nhất.
- Làm quen kỹ thuật mở rộng hai con trỏ.
📘 1️⃣ Kiểm tra Palindrome
def is_pal(s):
return s == s[::-1]
📘 2️⃣ Tìm Palindrome dài nhất – Expand Around Center
Mỗi vị trí có thể là tâm (lẻ hoặc chẵn). Mở rộng trái phải đến khi không còn khớp.
🌿 Python
def longest_pal(s):
res=""
for i in range(len(s)):
# tâm lẻ
l=r=i
while l>=0 and rlen(res): res=s[l:r+1]
l-=1; r+=1
# tâm chẵn
l,r=i,i+1
while l>=0 and rlen(res): res=s[l:r+1]
l-=1; r+=1
return res
print(longest_pal("babad"))
🌿 C++
string longestPal(string s){
int n=s.size(),start=0,len=1;
for(int i=0;i=0&&rlen){len=r-l+1;start=l;}
l--;r++;
}
l=i;r=i+1;
while(l>=0&&rlen){len=r-l+1;start=l;}
l--;r++;
}
}
return s.substr(start,len);
}
🧩 Bài tập
- Liệt kê tất cả các palindrome trong chuỗi.
- Tìm palindrome dài nhất ≤ k ký tự.
- Đếm số chuỗi con đối xứng trong S.
💡 Gợi ý bài 3
# Duyệt mọi tâm, đếm mỗi khi s[l]==s[r]
count += 1 mỗi lần mở rộng hợp lệ
💳 Quét mã ủng hộ tuỳ tâm nhé!