之前是用map做的,效率不太高,今天听了课之后茅塞顿开!
可以分为三种情况
- 左括号多余:((){}
- 右括号多余: ({)}]
- 括号不匹配: ({[}])
接下来是处理思路
- 如果是‘ ( '则向栈中push ’ ) ’
- 如果是‘ [ '则向栈中push ’ ] ’
- 如果是‘ { '则向栈中push ’ } ’
这样处理的好处是到右括号匹配时只需要看当前遍历到的符号和栈顶的符号是否相同即可 不需要用map进行额外的匹配
如果匹配失败(情况3)或者字符串遍历完成后栈中有多余元素(情况1) 或匹配到右括号时栈中已无元素(情况2)则均返回false
如果全部匹配成功 则循环结束时栈为空 我们在程序结尾return stack.empty() 即可。
课程链接:代码随想录题解
if(s.size() % 2 != 0){
return false;
}
for(int i = 0; i < s.size(); i++){
if(s[i] == '('){
st.push(')');
}else if(s[i] == '['){
st.push(']');
}else if(s[i] == '{'){
st.push('}');
}else if(st.empty() || s[i] != st.top()){
return false;
}else{
st.pop();
}
}
return(st.empty());
再见!