注意判空 and 这个题目里就没有别的字母 只有括号
用字典方便很多,左来了存右,右来了判==就可以了,不用判种类
class Solution:
def isValid(self, s: str) -> bool:
map={'(':')','[':']','{':'}'}
stk=[]
for i in s:
if i in map:
stk.append(map[i])
elif not stk or stk[-1]!=i:
return False
else:
stk.pop()
return not stk
用栈的话和上一题思路一样,没见过的入栈,相同弹出,属于是迭代的消消乐
class Solution:
def removeDuplicates(self, s: str) -> str:
stk=[]
for i in s:
if stk and stk[-1]==i:
stk.pop()
else:
stk.append(i)
return ''.join(stk)
不允许用栈的话思路就有意思一点 ,用快慢指针,把没见过的都换到前面来
slow表示要换掉的,这两个一样就连着前面的换掉
class Solution:
def removeDuplicates(self, s: str) -> str:
slow,fast=0,0
res=list(s)
length=len(s)
while fast<length:
res[slow]=res[fast]
fast+=1
if slow>0 and res[slow]==res[slow-1]:
slow-=1
else:
slow+=1
return ''.join(res[:slow])
150. 逆波兰表达式求值
这道题不涉及优先级还挺简单的
最基本的数字进栈,符号弹出
这里的map指向函数和lamda还挺好的
要是有优先级和单目运算和括号就烦一点(现在还不会)
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
from operator import add,sub,mul
op={'+':add,'-':sub,'*':mul,'/':lambda x,y:int(x/y)}
stk=[]
for i in tokens:
if i not in op:
stk.append(int(i))
else:
num2=stk.pop()
num1=stk.pop()
stk.append(op[i](num1,num2))
return stk.pop()