ধরুন, আমাদের একটি ছোট হাতের স্ট্রিং s আছে যাতে অক্ষর এবং বন্ধনী "(" এবং ")" রয়েছে। আমাদের বন্ধনীর মধ্যে আবদ্ধ প্রতিটি স্ট্রিংকে পুনরাবৃত্ত পদ্ধতিতে উল্টাতে হবে এবং ফলস্বরূপ স্ট্রিংটি ফিরিয়ে দিতে হবে।
সুতরাং, যদি ইনপুট s ="back(aps)ce" এর মত হয়, তাহলে আউটপুট হবে "ব্যাকস্পেস"।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন trav() সংজ্ঞায়িত করুন। এটি s, dir, start, close:=close, ans:=ans
লাগবে-
end :="(" যদি dir −1 এর মত হয়, অন্যথায় ")"
-
other :="(" যদি শেষ হয় ")", অন্যথায় ")"
-
যখন শুরু
-
যদি s[start] অন্যের মতো হয়, তাহলে
-
trav(s, -dir, close[other, start] - dir)
-
শুরু :=বন্ধ [অন্য, শুরু] + dir
-
-
অন্যথায়,
-
উত্তরের শেষে s[start] ঢোকান
-
start :=start + dir
-
-
-
-
প্রধান ফাংশন থেকে, নিম্নলিখিতগুলি করুন -
-
উত্তর :=একটি নতুন তালিকা
-
বন্ধ করুন :=")" এবং "(" কী সমন্বিত একটি নতুন মানচিত্র প্রাথমিকভাবে দুটি খালি মানচিত্র
-
স্ট্যাক :=একটি নতুন তালিকা
-
প্রতিটি সূচকের জন্য I এবং s তে c মান, করুন
-
যদি c "(" এর মত হয়, তাহলে
-
আমাকে স্ট্যাকের মধ্যে ঠেলে
-
-
অন্যথায় যখন c ")" এর মত হয়, তখন
-
o :=স্ট্যাকের উপরে, তারপর স্ট্যাক থেকে পপ করুন
-
বন্ধ করুন[")", i] :=o
-
বন্ধ করুন["(", o] :=i
-
-
-
trav(s, 1, 0)
-
ফাঁকা স্ট্রিং দিয়ে উত্তর যোগ করুন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution:
def solve(self, s):
ans = []
close = {")": {}, "(": {}}
stack = []
for i, c in enumerate(s):
if c == "(":
stack.append(i)
elif c == ")":
o = stack.pop()
close[")"][i] = o
close["("][o] = i
def trav(s, dir, start, close=close, ans=ans):
end = "(" if dir == -1 else ")"
other = "(" if end == ")" else ")"
while start < len(s) and s[start] != end:
if s[start] == other:
trav(s, −dir, close[other][start] − dir)
start = close[other][start] + dir
else:
ans.append(s[start])
start += dir
trav(s, 1, 0)
return "".join(ans)
ob = Solution()
print(ob.solve("back(aps)ce")) ইনপুট
"back(aps)ce"
আউটপুট
backspace