题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
思路
- 字符串替代
- 栈。
栈即为:先入后出。遇到左括号时入栈,遇到右括号时将对应左括号出栈。遍历完所有括号后 stack 仍然为空;建立哈希表 dic 构建左右括号对应关系:key 左括号,value 右括号;
添加特殊符号 “?” 是处理边界问题。 当stack为空时, stack.pop() 会报错。所以,len(stack) 若 = 1 则为True, 反之,则为 False。
作者:jyd
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码
1.
class Solution:
def isValid(self, s: str) -> bool:
while s.find('()') >-1 or s.find('{}') > -1 or s.find('[]') > -1:
a = ['()','[]','{}']
for i in a:
s1 = str(i)
if s.find(s1) > -1:
s = s.replace(s1,'')
return False if s else True
2.
class Solution:
def isValid(self, s: str) -> bool:
dic = {'{': '}', '[': ']', '(': ')', '?': '?'}
stack = ['?']
for c in s:
if c in dic:
stack.append(c) # 将左括号加入栈中
elif dic[stack.pop()] != c: # 如果出栈的左括号对应的不是右括号, 则False
return False
return len(stack) == 1