时间:2020-5-10
题目地址:力扣
题目难度:Easy
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
思路:使用列表实现栈
代码段1:执行出错
# execution error
class Solution:
def isValid(self, s: str) -> bool:
flag = True
li = ''.join(s)
s = []
for i in li:
if i in ['(', '{', '[']:
s.append(i)
elif i == ')':
temp = s[-1]
if temp == '(':
s.pop()
else:
flag = False
elif i == '}':
temp = s[-1]
if temp == '{':
s.pop()
else:
flag = False
elif i == ']':
temp = s[-1]
if temp == '[':
s.pop()
else:
flag = False
if s != []:
flag = False
return flag
结果:执行报错 输入: "]"
原因:对于为空的队列使用 s[-1] 报错
代码段2:执行通过
# execution pass
class Solution:
def isValid(self, s: str) -> bool:
flag = True
li = ''.join(s)
s = []
for i in li:
if i in ['(', '{', '[']:
s.append(i)
elif i == ')':
if s == []:
return False
else:
temp = s.pop()
if temp != '(':
return False
elif i == '}':
if s == []:
return False
else:
temp = s.pop()
if temp != '{':
return False
elif i == ']':
if s == []:
return False
else:
temp = s.pop()
if temp != '[':
return False
if s != []:
return False
return True
结果:执行通过
总结:此题目给出了许多测试用例,均执行通过后提交时仍是执行出错,应当针对代码进行白盒路径测试,保证提交时一次通过
【2020-07-15】
代码段3:字典 + 栈
结果:执行通过
class Solution:
def isValid(self, s: str) -> bool:
flag = True
li = ''.join(s)
s = []
dict = {']': '[', '}': '{', ')': '('}
for i in li:
if i in dict.values():
s.append(i)
elif s == []:
return False
else:
temp = s.pop()
if temp != dict[i]:
return False
if s != []:
return False
return True
总结:
- 很机智,这个自己写出来了,把dict的键和值对调了下
- 还是看下优化的代码
class Solution:
def isValid(self, s: str) -> bool:
flag = True
stack = []
dict = {']': '[', '}': '{', ')': '('}
for i in s:
if i in dict.values():
stack.append(i)
else:
if stack:
temp = stack.pop()
else:
temp = '#'
if temp != dict[i]:
return False
return not stack
2022-3-13
class Solution:
def isValid(self, s: str) -> bool:
par_dict = {'[':']','(':')','{':'}'}
par_list = []
for i in s:
if i in par_dict:
par_list.append(i)
else:
if len(par_list) == 0 or i != par_dict[par_list.pop()]:
return False
if len(par_list) == 0:
return True
else:
return False