def solve(string):
s = ''.join([ch for ch in string if ch in '()'])
return len(max(s.split(')'), key=len))Apakah solusi ini berfungsi? Tidak.
Jika kita berikan string
(()(())) ke fungsi ini, jawaban yang benar (kedalaman) adalah 3, tetapi fungsi mengembalikan 2. Logika "jumlah kurung buka berturut-turut" gagal pada struktur bersarang yang tidak berada di cabang pertama.☝🏻 Cara menyelesaikan dengan benar
Solusi yang membosankan tetapi berfungsi dengan kompleksitas O(n) menggunakan penghitung biasa. Kita telusuri string, naikkan penghitung saat
(, turunkan saat ), dan perbarui maksimum global setiap langkah.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
# Validasi kebenaran (opsional)
if current_depth < 0:
return -1
return max_depth if current_depth == 0 else -1Varian untuk estetika (fungsional):
Jika sangat ingin satu baris, bisa menggunakan
accumulate. Kita petakan kurung ke 1 dan -1, hitung jumlah prefiks (accumulate), lalu ambil maksimum.from itertools import accumulate
def solve_poly(s: str) -> int:
# Ubah '(' menjadi 1, ')' menjadi -1, sisanya 0
depths = accumulate(1 if c == '(' else -1 if c == ')' else 0 for c in s)
return max(depths, default=0)#algosobes
Komentar
0Belum ada komentar.
Masuk untuk ikut berdiskusi.