
借助輔助棧——右括号入棧
核心思想:
借助輔助棧,當遇到’(’,’[’,’{‘這三種字元的時候則讓對應的比對字元入棧(分别對應’)’,’]’,’}’),當出現的字元不是’(’,’[’,’{'這三種字元時,則先判斷棧是否為空或者目前字元是否與棧頂元素一樣,當棧空或者目前字元與棧頂字元不一樣時,則括号序列不合法,直接傳回;否則棧頂元素出棧。周遊字元串直到所有元素周遊完成。最後判斷棧是否為空,不為空則括号序列不合法;否則為合法序列
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();//最後判斷棧是否為空,不為空則括号序列不合法;否則為合法序列
}
};