मान लीजिए हमारे पास एक स्ट्रिंग s है जो S-एक्सप्रेशन है। हमें उस S-एक्सप्रेशन का मूल्यांकन करना है और परिणाम को पूर्णांक के रूप में वापस करना है। जैसा कि हम जानते हैं, S-एक्सप्रेशन या तो एक संख्या होती है, या कोष्ठक में लिपटा एक पुनरावर्ती एक्सप्रेशन जैसे (+ (- 3 2) (* 3 3)), जो (3 - 2) + (3 * 3) = 10 दर्शाता है। यहां मान्य ऑपरेटर +, -, *, और / हैं।
उदाहरण के लिए, यदि इनपुट है s = "(- (+ 3 2) 2)", तो आउटपुट 3 होगा, क्योंकि ((3 + 2) - 2) = 3।
एल्गोरिदम
stack := नया स्टैकsसे आरंभिक और अंतिम कोष्ठक हटाएंa := s को स्पेस से विभाजित करके पार्टिशन की सूची बनाएंaके प्रत्येक तत्व को रिवर्स ऑर्डर में प्रोसेस करें:- यदि तत्व की लंबाई > 1 है और यह '-' से शुरू होता है, तो इसे पूर्णांक के रूप में स्टैक में डालें
- अन्यथा यदि यह अंक है, तो पूर्णांक के रूप में स्टैक में डालें
- अन्यथा (यह ऑपरेटर है), स्टैक से दो संख्याएं पॉप करें, ऑपरेशन करें, और परिणाम को स्टैक में वापस डालें
- स्टैक के शीर्ष तत्व को वापस करें
उदाहरण
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