【Lintcode】有效的括號序列
阿新 • • 發佈:2019-01-03
最近比較閒,於是打算刷一些Lintcode的題來提高自己的程式碼功底。
題目描述:
給定一個字串所表示的括號序列,包含以下字元: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括號序列。
樣例:
括號必須依照 “()” 順序表示, “()[]{}” 是有效的括號,但 “([)]”則是無效的括號。
思路:學棧的時候,我們都知道是用棧的性質來匹配括號問題,OK能想到用棧來解決這個問題就夠了。(當然對這個題來說,你資料結構底層可以考慮用其他的,比如vector來做也是沒問題的)如果當前字元是左括號類的,就可以直接入棧,else呢,就獲取上個入棧的字元是什麼,然後在進行比較,如果不等於相應的括號就return false。但最後一定要判斷當前棧是否為空,如果不為空,那就說明其實不匹配。
程式碼如下:
class Solution {
public:
/*
* @param s: A string
* @return: whether the string is a valid parentheses
*/
bool isValidParentheses(string &s) {
// write your code here
stack<char> sta;
if(s.size()==0) return false;
for(int i=0;i<s.size();i++)
{
if (s[i]=='{' || s[i]=='[' ||s[i]=='(')
sta.push(s[i]);
else
{
if(sta.size()==0) return false;
char tmp=sta.top();
if(tmp=='(' && s[i]!=')') return false;
if(tmp=='[' && s[i]!=']') return false ;
if(tmp=='{' && s[i]!='}') return false;
sta.pop();
}
}
if(sta.size()!=0) return false;
return true;
}
};