描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
数据范围:字符串长度100000≤n≤10000
要求:空间复杂度 O(n),时间复杂度 O(n)
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
for(char &c:s){
if(c=='('){
stk.push(')');
}else if(c=='['){
stk.push(']');
}else if(c=='{'){
stk.push('}');
}else if(stk.empty()){//z这里一定要先判断,不然'}'这种案例过不去
return false;
}else if(stk.top()==c){
stk.pop();
}
}
return stk.empty();
}
private:
stack<char>stk;
};
注意一个点,对栈的判空要在判断stk.top()的前面,不然会导致访问空栈而导致段错误