20. 有效的括号
- 题目-简单难度
- 示例
- 1. if-else
- 2. 优化
- 3. 字典+栈
题目-简单难度
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1. if-else
时间
24ms
击败 37.49%使用 Python 的用户
内存
13.28mb
击败 5.01%使用 Python 的用户
class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""stack = []for i in range(len(s)):if s[i] == '(' or s[i] == '{' or s[i] == '[':stack.append(str(s[i]))elif s[i] == ')':if stack and stack[-1] == '(':stack.pop()else:stack.append(str(s[i]))elif s[i] == ']':if stack and stack[-1] == '[':stack.pop()else:stack.append(str(s[i]))elif s[i] == '}':if stack and stack[-1] == '{':stack.pop()else:stack.append(str(s[i]))if len(stack) != 0:return Falseelse:return True
2. 优化
时间
16ms
击败 84.60%使用 Python 的用户
内存
12.67mb
击败 88.66%使用 Python 的用户
class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""# 左边框left = ["(","{","["]# 如果起始不是左边框,直接falseif s[0] not in left:return False;l = len(s)st = []i = 0while (i < l):# 分类判断,如果栈为空,添加if (not st):st.append(s[i])# 如果栈顶的值可以和当前s索引的值匹配成完整括号,栈顶直接popelif (s[i] == ']' and st[-1] == '[') or (s[i] == '}' and st[-1] == '{') or (s[i] == ')' and st[-1] == '('):st.pop()# 其他情况添加到栈else:st.append(s[i])# print(st)i+=1return True if len(st) == 0 else False
3. 字典+栈
时间
20ms
击败 61.65%使用 Python 的用户
内存
12.74mb
击败 71.91%使用 Python 的用户
class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""dic = {"{":"}","(":")","[":"]"}st = []for i in s:# 判断栈不为空,并且st[-1]是左边框,再判断i是不是要找的右边框if st and st[-1] in dic and dic[st[-1]] == i:st.pop()else:st.append(i)return True if len(st) == 0 else False