ধরুন আমাদের একটি স্ট্রিং s আছে যা শুধুমাত্র তিনটি অক্ষর "X", "(", এবং ")" নিয়ে গঠিত। স্ট্রিংটিতে ভারসাম্যযুক্ত বন্ধনী রয়েছে এবং এর মধ্যে কিছু "X" রয়েছে এবং সম্ভবত নেস্টেড বন্ধনীও বারবার সেখানে থাকতে পারে। আমাদের বন্ধনীর প্রতিটি গভীরতায় s-এ "X" এর সংখ্যা খুঁজে বের করতে হবে, অগভীর গভীরতা থেকে শুরু করে গভীরতম গভীরতা পর্যন্ত।
সুতরাং, যদি ইনপুট s ="(XXX(X(XX))XX)" এর মত হয়, তাহলে আউটপুট হবে [5, 1, 2]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- গভীরতা :=-1
- আউট :=একটি নতুন তালিকা
- s-এ প্রতিটি c-এর জন্য, করুন
- যদি c "(" এর মত হয়, তাহলে
- গভীরতা:=গভীরতা + 1
- অন্যথায় যখন c ")" এর মত হয়, তখন
- গভীরতা :=গভীরতা - 1
- যদি গভীরতা আউটের আকারের সমান হয়, তাহলে
- আউটের শেষে 0 ঢোকান
- যদি c "X" এর মত হয়, তাহলে
- আউট[গভীর] :=আউট[গভীর] + 1
- যদি c "(" এর মত হয়, তাহলে
- রিটার্ন আউট
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s): depth = -1 out = [] for c in s: if c == "(": depth += 1 elif c == ")": depth -= 1 if depth == len(out): out.append(0) if c == "X": out[depth] += 1 return out s = "(XXX(X(XX))XX)" print(solve(s))
ইনপুট
"(XXX(X(XX))XX)"
আউটপুট
[5, 1, 2]