python資料結構與演算法 棧

2021-09-26 06:47:28 字數 2365 閱讀 8650

逆波蘭表示式(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

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))

輸入:"abbaca"

輸出:"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...