题目描述:
示例:
解法思路:(主要是编写判断函数)
准备:
由于我们是要看从后面开始判断,所以我们想到用栈的使用方法,这里先简单说明一下整体思路:第一我们要创建一个栈stack,接着创建一个键值对序列(也可理解为哈希表),将题目所给的括号对以键值对的方式存储;
主体:
接着对输入字符串的每个字符进行判断,若该字符属于键值对中的键值(即为左括号),则将其放入栈中;若为非键值(即为右括号),则要判断栈是否为空(这点很重要,非则会导致下标访问出错),若为空,则直接返回false,不为空,则与栈顶元素进行比较,如果该元素与栈顶元素对应的值相等,则匹配成功,将栈顶元素弹出,进行下个字符判断,匹配不成功也直接返回false。以此往复,直到所有字符判断完成;
结束:
最后,注意结束时不是直接返回true,还要对栈的长度进行判断,如果栈的长度不为0,则说明里面还有字符存在,不难知道,都是左括号,此时也要返回false,为0,返回true!
当然如果要问为什么中间右括号那些是可以直接返回false?
当我们摸清楚规律的时候,我们很自然的想到,如果进来一个右括号不与左括号匹配的话,那么匹配结果一定是不成功的,如果进来一个右括号时栈为空,这也是显然匹配不成功的,所以我们可以根据这些判断来排除很多种情况;
此题的python代码展示如下:(别问我为什么用python写,因为它简单bushi)
class Solution:
def isValid(self, s: str) -> bool:
dic={'(':')','{':'}','[':']'}
stack=[]
for i in s:
# 左括号,直接添加
if i in dic:
stack.append(i)
# 非空情况下判断右括号是否能配对
elif stack:
if dic[stack.pop()] != i:
return False
# 右键进来,栈为空,直接无解,不浪费时间
else:
return False
# 防止结束时有左括号
return len(stack)==0
此博客为本人第一篇博客,欢迎各位留言指导,感谢支持!!!