LeetCode — 3110. Bir String’in Puanı
Bu makalede, LeetCode’da bulunan 3110. Bir String’in Puanı problemine çözüm araştıracağız. Bu problem, verilen bir stringin puanını hesaplamakla ilgilidir.
Problem Tanımı
Verilen bir s stringi olsun. Stringin puanı, aşağıdaki kurallara göre hesaplanır:
- Eğer
sboş bir string ise, puanı0‘dır. - Eğer
stek bir harf içeriyorsa, puanı1‘dir. - Eğer
s"("ve")"ile çevrili iki veya daha fazla stringden oluşuyorsa, puanı,"("ve")"arasındaki stringin puanının iki katıdır. - Eğer
sbirden fazla alt stringden oluşuyorsa, puanı, tüm alt stringlerin puanlarının toplamıdır.
Örneğin:
s = "()"ise, puanı2‘dir.s = "(())"ise, puanı4‘tür.s = "()()"ise, puanı2‘dir.s = "(()())"ise, puanı6‘dır.
s stringinin puanını hesaplayan bir fonksiyon yazın.
Çözüm
Bu problemi çözmek için, stringi yinelemeli olarak işleyebilir ve her adımda puanı hesaplayabiliriz. Aşağıdaki algoritma, stringin puanını hesaplamak için kullanılabilir:
- Eğer string boş ise, puanı
0‘dır. - Eğer string tek bir harf içeriyorsa, puanı
1‘dir. - Eğer string
"("ve")"ile çevrili iki veya daha fazla stringden oluşuyorsa, puanı,"("ve")"arasındaki stringin puanının iki katıdır. Bunu alt stringin puanını yinelemeli olarak hesaplayarak elde edebiliriz. - Eğer string birden fazla alt stringden oluşuyorsa, puanı, tüm alt stringlerin puanlarının toplamıdır. Bunu her alt stringin puanını yinelemeli olarak hesaplayarak elde edebiliriz.
Bu algoritmayı Python’da şu şekilde uygulayabiliriz:
“`python
def scoreOfParentheses(s: str) -> int:
“””
Verilen bir stringin puanını hesaplayan fonksiyon.
Args:
s: Puanı hesaplanacak string.
Returns:
Stringin puanı.
“””
if not s:
return 0
if s == “()”:
return 1
total = 0
balance = 0
i = 0
while i < len(s):
if s[i] == "(":
balance += 1
else:
balance -= 1
if s[i - 1] == "(":
total += 1 << (balance - 1)
else:
total += scoreOfParentheses(s[i - balance: i])
i += 1
return total
```
Bu kod, stringin her karakterini yinelemeli olarak işler. Eğer karakter "(" ise, balance değişkeni 1 artırılır. Eğer karakter ")" ise, balance değişkeni 1 azaltılır. Eğer önceki karakter "(" ise, toplam puana 1 << (balance - 1) eklenir. Aksi takdirde, alt stringin puanı yinelemeli olarak hesaplanır ve toplam puana eklenir.
Örnek Kullanım
```python
s = "(()())"
score = scoreOfParentheses(s)
print(f"Stringin puanı: {score}") # Stringin puanı: 6
```
Sonuç
Bu makalede, LeetCode'da bulunan 3110. Bir String'in Puanı problemine çözüm aradık. Bu problem, verilen bir stringin puanını hesaplamakla ilgilidir. Yinelemeli bir yaklaşım kullanarak, stringin puanını hesaplayan bir fonksiyon geliştirdik. Bu fonksiyon, stringi yinelemeli olarak işler ve her adımda puanı hesaplar.
Umarım bu makale sizin için faydalı olmuştur. Daha fazla LeetCode çözümünü fatihsoysal.com adlı web sitemde bulabilirsiniz.