1. 程式人生 > >【Lintcode】有效的括號序列

【Lintcode】有效的括號序列

最近比較閒,於是打算刷一些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; } };