मान लीजिए कि हमारे पास एस-एक्सप्रेशन के रूप में एक स्ट्रिंग है। हमें उस एस-एक्सप्रेशन का मूल्यांकन करना होगा और परिणाम को पूर्णांक के रूप में वापस करना होगा। जैसा कि हम जानते हैं कि s-अभिव्यक्ति एक व्यंजक है जो या तो एक संख्या है, या (+ (- 3 2) (* 3 3)) जैसे कोष्ठकों में लिपटा हुआ एक पुनरावर्ती व्यंजक है, जो (3 - 2) + (3 *) को इंगित करता है। 3) =10. यहां मान्य ऑपरेटर +, -, *, और / हैं।
इसलिए, यदि इनपुट s ="(- (+ 3 2) 2)" जैसा है, तो आउटपुट 3 होगा, जैसे ((3 + 2) - 2) =3.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
स्टैक :=एक नया स्टैक
-
s के उद्घाटन और समापन कोष्ठक को हटा दें
-
a :=रिक्त स्थान का उपयोग करके विभाजित करें और विभाजनों की सूची बनाएं
-
प्रत्येक i के लिए एक उल्टे क्रम में, करें
-
यदि i> 1 का आकार है, तो
-
अगर मैं [0] "-" के समान है, तो
-
मुझे स्टैक में पूर्णांक के रूप में पुश करें
-
अगले पुनरावृत्ति के लिए जाएं
-
-
अन्यथा,
-
मुझे स्टैक में पूर्णांक के रूप में पुश करें
-
-
-
अन्यथा जब मैं एक अंक हूं, तब
-
मुझे स्टैक में पूर्णांक के रूप में पुश करें
-
-
अन्यथा,
-
यदि ढेर का आकार>=2, तो
-
num1 :=स्टैक से पॉप
-
num2 :=स्टैक से पॉप
-
अगर मैं "+" जैसा ही हूं, तो
-
num1 + num2 निष्पादित करें और स्टैक में पुश करें
-
-
अन्यथा जब मैं "-" जैसा ही होता हूं, तब
-
num1 - num2 निष्पादित करें और स्टैक में पुश करें
-
-
अन्यथा जब मैं "*" जैसा ही होता हूं, तब
-
num1 * num2 निष्पादित करें और स्टैक में पुश करें
-
-
अन्यथा,
-
num1 / num2 परफॉर्म करें और स्टैक में पुश करें
-
-
-
-
-
स्टैक से शीर्ष तत्व लौटाएं, और शीर्ष तत्व को हटा दें
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution:
def solve(self, s):
stack = list()
s = s.replace("(", "")
s = s.replace(")", "")
a = s.split()
for i in a[::-1]:
if len(i) > 1:
if i[0] == "-":
stack.append(int(i))
continue
else:
stack.append(int(i))
elif i.isdigit():
stack.append(int(i))
else:
if len(stack) >= 2:
num1 = stack.pop()
num2 = stack.pop()
if i == "+":
stack.append(int(num1 + num2))
elif i == "-":
stack.append(int(num1 - num2))
elif i == "*":
stack.append(int(num1 * num2))
else:
stack.append(int(num1 / num2))
return stack.pop()
ob = Solution()
s = "(- (+ 3 2) 2)"
print(ob.solve(s)) इनपुट
s = "(- (+ 3 2) 2)"
आउटपुट
3