Giả sử chúng ta có một chuỗi s chỉ bao gồm ba ký tự "X", "(", và ")". Chuỗi có các dấu ngoặc cân bằng và ở giữa một số "X" ở đó cùng với các dấu ngoặc lồng nhau có thể cũng có thể có một cách đệ quy. Chúng ta phải tìm số "X" ở mỗi độ sâu của dấu ngoặc tính bằng s, bắt đầu từ độ sâu nông nhất đến độ sâu nhất.
Vì vậy, nếu đầu vào là s ="(XXX (X (XX)) XX)", thì đầu ra sẽ là [5, 1, 2]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- độ sâu:=-1
- out:=một danh sách mới
- đối với mỗi c trong s, thực hiện
- nếu c giống với "(", thì
- độ sâu:=độ sâu + 1
- ngược lại khi c giống với ")" thì
- độ sâu:=độ sâu - 1
- nếu độ sâu bằng với kích thước của bề ngoài, thì
- chèn số 0 vào cuối đoạn văn bản
- nếu c giống "X", thì
- out [depth]:=out [depth] + 1
- nếu c giống với "(", thì
- quay trở lại
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def giải quyết (s):depth =-1 out =[] for c in s:if c =="(":depth + =1 elif c ==")":depth - =1 nếu width ==len (out):out.append (0) if c =="X":out [deep] + =1 return outs ="(XXX (X (XX)) XX)" print (Expl (s))Đầu vào
"(XXX (X (XX)) XX)"Đầu ra
[5, 1, 2]