今天的题是这两个数据结构的应用
20. Valid Parentheses
这道题不难,两种方法均需要用到stack
Way1:
第一种方法是用dictionary来存一个mapping,然后每次判断是否再dic里面,并采取不同的措施,但是注意不在dic的情况
class Solution:
def isValid(self, s: str) -> bool:
dic={'(':')','{':'}','[':']'}
stack=[]
for ch in s:
if ch in dic:
stack.append(ch)
else:
if not stack:
return False
else:
tmp=stack.pop()
if ch!=dic[tmp]:
return False
return not stack
Way2:
第二种方法更加巧妙一些,不用dictionary,直接把对应的括号存在stack里面,然后和未来的括号做对比
class Solution:
def isValid(self, s: str) -> bool:
arr=[]
for ch in s:
if ch=='(':
arr.append(')')
elif ch == '[':
arr.append(']')
elif ch == '{':
arr.append('}')
elif not arr or arr[-1]!=ch:
return False
else:
arr.pop()
if arr:
return False
return True
1047. Remove All Adjacent Duplicates In String
这道题还是用stack来做
Way1:
就是每次和stack[-1]去比,如果一样则pop
class Solution:
def removeDuplicates(self, s: str) -> str:
arr=[]
for ch in s:
if arr:
if arr[-1]==ch:
arr.pop()
else:
arr.append(ch)
else:
arr.append(ch)
return "".join(arr)
150. Evaluate Reverse Polish Notation
这道题就是常规的用stack来进行数学计算
Way1:
碰到数字转成int并存在stack里面,碰到符号就从stack取出两个元素做operation然后再存回去
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
arr=[]
for ch in tokens:
if ch == '+':
n1=arr.pop()
n2=arr.pop()
arr.append(n1+n2)
elif ch == '-':
n1=arr.pop()
n2=arr.pop()
arr.append(n2-n1)
elif ch == '*':
n1=arr.pop()
n2=arr.pop()
arr.append(n1*n2)
elif ch == '/':
n1=arr.pop()
n2=arr.pop()
arr.append(int(n2/n1))
else:
arr.append(int(ch))
return arr.pop()