有效的括号
小祁同学 2022-11-23
技术文章
leetcode
介绍
力扣-第20题-有效的括号,栈的使用
难度:简单
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
1
2
2
示例 2:
输入:s = "()[]{}"
输出:true
1
2
2
示例 3:
输入:s = "(]"
输出:false
1
2
2
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
呜呜,简单吧,可我不会唉,像'([{}()]())'
,这样的属实就不会了,看了题解发现这道题一个用栈比其他方式要快的很,以下用两种解法做这道题
# 方法一、python字符串直接替换
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
l = int(len(s)/2)
for i in range(0,l):
s=s.replace("()","").replace("[]","").replace("{}","")
return s == ""
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 方法二、利用栈(推荐)
栈先入后出,如果是左符号则入栈,如果是右符号则对应栈顶左符号出栈
class Solution:
def isValid(self, s: str) -> bool:
# 定义一个栈
stack = []
for i in s:
# 左符号入栈
if i == '{' or i == '[' or i == '(':
stack.append(i)
# 判断栈里面是不是空
elif len(stack) == 0:
return False
# 右符号,判断栈顶是否对应的左符号,对应就pop出栈
elif i == '}' and stack[-1] == '{':
stack.pop()
elif i == ']' and stack[-1] == '[':
stack.pop()
elif i == ')' and stack[-1] == '(':
stack.pop()
# 找不到对应的左符号,返回False
else:
return False
# 判断栈里面是不是空
if len(stack) != 0:
return False
return True
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25