题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
思路1:
使用栈,遍历输入字符串,如果当前符号为左半边括号,则将其压入栈中,
如果遇到右半边括号则分类讨论:
1.栈不为空且栈顶元素为对应的左半边括号,栈顶元素出栈,继续循环;
2.栈为空或者栈顶元素不是对应的左半边括号,返回false。
python代码实现:
class Solution:
def isValid(self,s):
stack = []
map = {
"{":"}",
"[":"]",
"(":")"
}
for x in s:
if x in map:
stack.append(map[x])
else:
if len(stack)!=0:
top_element = stack.pop()
if x != top_element:
return False
else:
continue
else:
return False
return len(stack) == 0
说明:[]为列表,内置了.append和.pop等方法
{}为字典,包含key和value,map[key]=value
continue:不进行后续代码,进入下一次循环
当当前字符为左半括号,此处采取一个巧妙的方法,将它对应的右半括号入栈,这样处理的话,当符号为右半括号时只需判断与栈顶符号相等即可
return false:结束,返回false
return len(stack) == 0:栈为空的话返回true
思路2:
用空串替代可以匹配的括号。
class Solution:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''