LeetCode 20. 有效的括號

給定一個只包括 '('')''{''}''['']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

思路:利用棧,後進先出的特性,依次掃描字符串,一共會出現如下幾種情況:

1. 如果在棧爲空的時候,掃描到了左括號那麼就把這個左括號壓棧,如果在棧爲空的時候,掃描到了右括號,說明不可能匹配。

2. 如果棧中已經有元素,且棧頂元素爲左括號的時候,我們就去判斷來的字符是不是對應的右括號,如果是,說明這個括號配對了,那麼就把這個括號出棧,繼續匹配,如果不是則不匹配。但是如果說來的字符還是左括號的話,那麼就繼續壓棧。

代碼如下:

class Solution {
public:
    bool isValid(string s) {
        if(s.empty()) return true;
        stack<char> parentheses;
        for(auto c:s){
            if(parentheses.empty() && (']'==c || ')'==c || '}'==c)) return false;
            else if(parentheses.empty() && ('['==c || '('==c || '{'==c)) parentheses.push(c);
            else if(!parentheses.empty() && ('['==c || '('==c || '{'==c)) parentheses.push(c);
            else if(!parentheses.empty() && (']'==c || ')'==c || '}'==c))
            {
                char top=parentheses.top();
                if(']'==c && top=='[') parentheses.pop();
                else if('}'==c && top=='{') parentheses.pop();
                else if(')'==c && top=='(') parentheses.pop();
                else return false;
            }
        }
        
        if(parentheses.empty()) return true;
        else return false;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章