逆波蘭表示式(reverse polish notation):有效的運算子包括 +, -, *, / 。
每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。
輸入: ["2", "1", "+", "3", "*"]
輸出: 9
解釋: ((2 + 1) * 3) = 9
分析:棧
遍歷陣列,逐漸壓入棧中,如果遇到運算字元,則彈出棧頂兩個元素,之後將計算結果再壓入棧中
分析:當遇到左邊括號,依次壓入棧中;class solution:
def rpn(self,s):
stack=
operation=['+','-','*','/']
for i in range(len(s)):
if s[i] not in operation:
else:
if stack and i>=2:
a=stack.pop()
b=stack.pop()
if s[i]=='+':
res=b+a
if s[i]=='-':
res=b-a
if s[i]=='*':
res=b*a
if s[i]=='/':
res=int(b/a) #除法只保留整數部分
else:
return 0
return stack[-1]
if __name__=='__main__':
s=["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
solution=solution()
print(solution.rpn(s))
當遇到右邊的括號,檢查棧頂的元素
如果是相同的元素,彈出棧頂元素,不相同意味著表示式無效。
如果到最後棧中仍有元素存在,這表示式無效
eg:輸入: "(){}" 輸出: true
輸入:"abbaca"class solution:
def isvalid(self,s):
stack=
left_bracket=['(','[','']
for i in s:
if i in left_bracket:
else:
if stack[-1]==left_bracket[right_bracket.index(i)]:
stack.pop()#彈棧
else:
return false
if not stack:
return true
else:
return false
if __name__=='__main__':
s='(){}'
solution=solution()
print(solution.isvalid(s))
輸出:"ca"
分析:棧的思路
遍歷陣列,若與棧頂元素相同,彈出棧頂元素;
若不相同,壓入棧
class solution:
def removeduplicates(self,s):
stack=
for i in s:
if not stack or i!=stack[-1]:
else:
stack.pop()
return ''.join(stack)
if __name__=='__main__':
s="abbccad"
solution=solution()
print(solution.removeduplicates(s))
class minstack:
def __init__(self):
#初始化兩個空棧
self.stack=
self.min_stack=
def push(self,x):#壓棧
if not self.min_stack or x<=self.min_stack[-1]:
def pop(self):#彈棧
if self.stack.pop()==self.min_stack[-1]:
self.min_stack.pop()
def top(self):#獲取棧頂元素
return self.stack[-1]
def getmin(self):#獲取棧的最小值
return self.min_stack[-1]
python資料結構與演算法 棧
棧 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 p...
資料結構與演算法《棧》
概念 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使...
棧(資料結構與演算法)
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...