Sezar Şifresi
beginnerO(n) zaman, O(1) veya O(n) bellek
Metni n karakter kaydırarak şifrele (yalnızca İngilizce harfler).
Büyük/küçük harf korunmalı, diğer karakterler değişmemeli.
İpuçları
- 💡 İpucu 1: ord() ile karakterin ASCII kodunu al, chr() ile geri dönüştür.
- 💡 İpucu 2: Büyük harf için: chr((ord(c) - ord('A') + shift) % 26 + ord('A'))
- 💡 İpucu 3: Harf olmayanları (noktalama vb.) olduğu gibi bırak.
Yaklaşım & Açıklama
String/liste ters çevirme, **en temel** algoritma sorularındandır.
**Problem:** "hello" → "olleh".
**Yaklaşımlar:**
```python
# 1. Slicing — en kısa
reversed_str = s[::-1]
# 2. reversed() + join
reversed_str = ''.join(reversed(s))
# 3. Manuel (in-place, O(1) bellek)
def reverse_string(s):
s = list(s) # string immutable
l, r = 0, len(s) - 1
while l < r:
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
return ''.join(s)
```
**Liste için:** `lst.reverse()` (in-place) veya `lst[::-1]` (yeni liste).
**Bellek:** Slicing O(n) yeni nesne oluşturur. In-place swap O(1).