給定一個字符串所表示的括號序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括號序列。
樣例
括號必須依照 "()" 順序表示, "()[]{}" 是有效的括號,但 "([)]"則是無效的括號。
利用堆棧
建立一個堆棧,然后遍歷字符串,如果是'(','{'.'[',則入棧,否則判斷當前字符串和棧頂元素是否是一對括號(這可以寫一個輔助函數(shù)),要注意的是,需要提前判斷棧是否為空,為空的時候取top是違法的的,所以只要為空就入棧,然后執(zhí)行下一次循環(huán),而且,只要循環(huán)過程中出現(xiàn)一次棧頂元素和當前元素不匹配的情況,就可以跳出循環(huán)返回false了。這樣就比較清楚了:
bool isValidParentheses(string &s) {
stack<char> res;
for(int i=0;i<s.size();i++)
{
if(res.empty()) //棧為空,入棧,下一次循環(huán)
{ res.push(s[i]);
continue;
}
if(s[i]=='('||s[i]=='['||s[i]=='{') //如果是左括號,則入棧
res.push(s[i]);
else if(isBracket(res.top(),s[i])) //匹配的話,出棧
res.pop();
else //不匹配的話就不合法
return false;
}
return res.empty();
// write your code here
}
bool isBracket(char &left,char &right)
{
if(left=='('&&right==')') return true;
if(left=='['&&right==']') return true;
if(left=='{'&&right=='}') return true;
else
return false;
}