def solve(string):
s = ''.join([ch for ch in string if ch in '()'])
return len(max(s.split(')'), key=len))Çalışan bir çözüm mü? Hayır.
Bu fonksiyona
(()(())) dizesini verirsek, doğru cevap (derinlik): 3 iken fonksiyon 2 döndürür. "Ardışık açma parantezlerinin sayısı" mantığı, ilk dalda olmayan iç içe yapılarda bozulur. ☝🏻 Doğru çözüm nasıl yapılır
O(n) karmaşıklığına sahip sıkıcı ama çalışan bir çözüm, basit bir sayaç kullanır. Dizede ilerleriz,
( için sayacı artırır, ) için azaltır ve her adımda global maksimumu güncelleriz.def max_depth(s: str) -> int:
current_depth = 0
max_depth = 0
for char in s:
if char == '(':
current_depth += 1
max_depth = max(max_depth, current_depth)
elif char == ')':
current_depth -= 1
# Geçerlilik doğrulaması (isteğe bağlı)
if current_depth < 0:
return -1
return max_depth if current_depth == 0 else -1Estetikler için varyant (fonksiyonel):
Tek satırda yapmak çok istenirse
accumulate kullanılabilir. Parantezleri 1 ve -1 ile eşleriz, önek toplamlarını (accumulate) hesaplar ve maksimumu alırız.from itertools import accumulate
def solve_poly(s: str) -> int:
# '(' i 1, ')' i -1, diğerlerini 0 yap
depths = accumulate(1 if c == '(' else -1 if c == ')' else 0 for c in s)
return max(depths, default=0)#algosorusu
Yorumlar
0Henüz yorum yok.
Tartışmaya katılmak için giriş yapın.