मान लीजिए कि हमारे पास एस-एक्सप्रेशन के रूप में एक स्ट्रिंग है। हमें उस एस-एक्सप्रेशन का मूल्यांकन करना होगा और परिणाम को पूर्णांक के रूप में वापस करना होगा। जैसा कि हम जानते हैं कि 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