借助辅助栈——右括号入栈
核心思想:
借助辅助栈,当遇到’(’,’[’,’{‘这三种字符的时候则让对应的匹配字符入栈(分别对应’)’,’]’,’}’),当出现的字符不是’(’,’[’,’{'这三种字符时,则先判断栈是否为空或者当前字符是否与栈顶元素一样,当栈空或者当前字符与栈顶字符不一样时,则括号序列不合法,直接返回;否则栈顶元素出栈。遍历字符串直到所有元素遍历完成。最后判断栈是否为空,不为空则括号序列不合法;否则为合法序列
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
stack<char>stk;
for(char c : s){
if(c == '('){//当遇到'(','[','{'这三种字符的时候则让对应的匹配字符入栈(分别对应')',']','}')
stk.push(')');
}else if(c == '{'){
stk.push('}');
}else if(c == '['){
stk.push(']');
}else{//当出现的字符不是'(','[','{'这三种字符时,则先判断栈是否为空或者当前字符是否与栈顶元素一样,当栈空或者当前字符与栈顶字符不一样时,则括号序列不合法,直接返回
if(stk.empty() || stk.top() != c){
return false;
}
stk.pop();
}
}
return stk.empty();//最后判断栈是否为空,不为空则括号序列不合法;否则为合法序列
}
};