- 遇到左括号入栈;
- 遇到右括号需要查栈是否为空,栈为空出错,栈不为空查栈顶元素,若与右括号匹配则弹出栈顶,继续下一个字符;
- 重复1,2直到字符串遍历完成;
- 最后如果栈为空,则为有效的括号匹配。
class Solution {
public:
bool isValid(string s) {
stack<char> zuokuohao;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(' || s[i] == '{' || s[i] == '['){
zuokuohao.push(s[i]);
}
else{
if(zuokuohao.empty()) return false;
else{
char tmp = ' ';
if(s[i] == ')'){
tmp = zuokuohao.top();
if(tmp != '(') return false;
zuokuohao.pop();
}
else if(s[i] == '}'){
tmp = zuokuohao.top();
if(tmp != '{') return false;
zuokuohao.pop();
}
else{
tmp = zuokuohao.top();
if(tmp != '[') return false;
zuokuohao.pop();
}
}
}
}
if(zuokuohao.empty()) return true;
return false;
}
};
- 用栈实现:如果栈顶和即将入栈的元素一样,将栈顶弹出,消消乐。
- 逆波兰表达式是后缀表达式。
- 后缀表达式求值用栈实现,栈保存运算数op,遇到运算符弹出栈顶,先弹出作x,后弹出作为y,实现 y op x 再压入栈中。
- 用string保存到数组,string到int的转换。
string tt = “123”;
int tmp = stoi(tt);