时间复杂度:O(n)
解题思路
栈的典型应用。
建立一个符号栈,存放左括号,遇到右括号时与栈顶左括号进行匹配,匹配成功该左括号出栈,否则返回false说明括号不匹配。
如果符号栈为空,遇到了一个右括号那么也返回false,说明无左括号能与该右括号匹配。
当遍历完所有括号后,如果符号栈不为空,还是返回false,说明有左括号没有匹配到右括号。
如果经过这三个判断还能坚持到最后,就可以返回true了,说明括号是完全匹配的。
AC代码
func isValid(s string) bool {
stk:=[]byte{}
m:=map[byte]byte{
')':'(',
']':'[',
'}':'{',
}
for i:=0;i<len(s);i++ {
if s[i]=='('||s[i]=='['||s[i]=='{'{
stk=append(stk,s[i])
}else if len(stk)>0&&stk[len(stk)-1]==m[s[i]]{
stk=stk[:len(stk)-1]
}else{
return false
}
}
return len(stk)==0
}
感悟
很经典的一道题,我记着在大一下学数据结构时,其中一节的实验是让设计一个计算器就用到了这种符号栈来判断括号是否匹配。