记录刷题每一天
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
法一、有点投机的成分在
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
while '()' in s or '{}' in s or '[]' in s:
s=s.replace('()','')
s=s.replace('{}','')
s=s.replace('[]','')
return s==''
法二 、利用栈的原理
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s)%2==1:
return False
dic={')':'(',']':'[','}':'{'}
k=[]
for i in s:
if k and i in dic:
if k[-1]==dic[i]:
k.pop()
else:
return False
else:
k.append(i)
return not k
这段代码是一个Python解决方案,用于判断给定字符串s中的括号是否匹配。函数名为isValid。
首先,如果输入字符串的长度是奇数,直接返回False。
然后我们创建一个字典dic,用于存储右括号与其对应的左括号。例如,']' 对应 '['。
接下来,我们遍历字符串s中的每个字符i,并执行以下操作:
- 如果栈k非空并且字符i是一个右括号,则比较栈顶元素和i是否匹配。如果栈顶元素不是对应的左括号,则说明括号不匹配,返回False;否则弹出栈顶元素。
- 如果字符i是一个左括号,则将其压入栈k中。
最后,判断栈k是否为空。 如果栈k为空,则表示所有括号都有正确的匹配。如果栈k不为空,则意味着至少有一个未关闭的左括号,因此返回False。
综上,这段代码使用栈来判断括号是否匹配,并返回一个布尔值说明给定字符串中的括号是否有效。
欢迎留言交流