beginnerO(n) zaman, O(n) bellek (slicing) veya O(1) (iki pointer)
Bir kelimenin veya cümlenin palindrome olup olmadığını kontrol et.
Büyük/küçük harf fark etmesin, boşluk ve noktalama işaretlerini yok say.
Örnek: 'A man a plan a canal Panama' → True
İpuçları
💡 İpucu 1: Önce metnin yalnızca harf ve rakamlardan oluşan temiz halini oluştur. ''.join(...) ve str.isalnum() kullanabilirsin.
💡 İpucu 2: Büyük/küçük harf farkını ortadan kaldırmak için .lower() metodunu kullan.
Palindrome kontrolü, Python mülakatlarının **en sık** sorduğu string sorusudur.
**Problem:** Bir metin tersten okunduğunda aynı mı? Noktalama, boşluk ve büyük/küçük harf yok sayılır.
**Üç yaklaşım:**
```python
# 1. Slicing — en kısa
def is_palindrome(s):
cleaned = re.sub(r'[^a-z0-9]', '', s.lower())
return cleaned == cleaned[::-1]
# 2. İki pointer — O(1) ek bellek
def is_palindrome(s):
cleaned = re.sub(r'[^a-z0-9]', '', s.lower())
l, r = 0, len(cleaned) - 1
while l < r:
if cleaned[l] != cleaned[r]:
return False
l += 1
r -= 1
return True
```
**Neden slicing daha hızlı görünür ama iki pointer O(1) bellek?** Slicing yeni string oluşturur (O(n) bellek), iki pointer sadece index taşır.
**Edge case'ler:**
- Boş string → True (vakum palindromdur)
- Tek karakter → True
- Karışık Unicode (Türkçe: "Ağaç") → ASCII-cleaning ile kaybedilir, çözüm `unicodedata.normalize`.