在Python中堆栈和队列可以用list列表来实现:
队列:FIFO: list.append() list.pop(0)
堆栈:FILO: list.append() list.pop(-1)
最后是我今天突然想到的,现在我感觉堆栈是一种概念一种工具,在不同的语言中可能有不同的叫法和实现方法,不一定在所有的语言中都叫Stack。
在写这道题的过程中还出现了一个问题:
ValueError: invalid literal for int() with base 10:xxx 出现这种错误的原因是我用强制数据转换int()来转换了字符,就会出现错误。 Python中没有char只有str,但int()只能转化由纯数字组成的字符串!!!!!
class Solution:
def isValid(self, s: str) -> bool:
stk=list()
hash_map={')':'(','}':'{',']':'['}
for i in range(len(s)):
if s[i] not in hash_map: # s[i]不在hash_map中说明是左半边的括号,左半边的括号始终是没有错误的。
stk.append(s[i])
else:
if not stk or hash_map[s[i]] != stk.pop():
return False
return not stk
本来自己写的只超过了16-17%的代码,哭了。 看到还可以用字典来设置,牛皮!!
class Solution:
import re
def isValid(self, s: str) -> bool:
stk=list()
for i in range(len(s)):
if s[i] == '(' or s[i] == '{' or s[i] == '[' :
stk.append(s[i])
else:
if (len(stk)==0):
return False
last=len(stk)-1
if (stk[last] == '(' and s[i] == ')') or (stk[last] == '[' and s[i] == ']') or (stk[last] == '{' and s[i] == '}'):
stk.pop(-1)
else:
return False
if len(stk) == 0:
return True
return False
这是我最初自己写的代码,冗余比较大,if判断语句很多,low了不少。