今天继续学习栈和队列相关内容。
1. 有效的括号
判断字符串的括号是否是正常开闭的。这个很明显是用栈实现的,类似栈实现后缀表达式计算。
遍历字符串,遇到括号时将对应的反括号push入栈,如果遇到相同的字符,就pop出栈,如果左侧有多余字符,遍历后栈不为空,如果括号不匹配,遍历时栈顶会不等于遍历元素,如果右侧有多余字符,栈为空而字符串没有遍历完,找不到匹配的字符。
class Solution {
public:
bool isValid(string s) {
if(s.size()%2) return false;
stack<char> stack;
for( int i = 0; i < s.size(); i++ ){
if( s[i] == '(') stack.push(')');
else if( s[i] == '[' ) stack.push(']');
else if( s[i] == '{' ) stack.push('}');
else if( stack.empty() || s[i] != stack.top() ) return false;
else stack.pop();
}
return stack.empty();
}
};
题例 :