【演算法百題之五十二】有效的括號
阿新 • • 發佈:2020-12-16
【演算法百題之五十二】有效的括號
大家好,我是Lampard~~
很高興又能和大家見面了,接下來準備系列更新的是演算法題,一日一練,早日升仙!
今天的問題是:有效的括號
示例:
輸入: "()"
輸出: true輸入: "()[]{}"
輸出: true輸入: "(]"
輸出: false輸入: "([)]"
輸出: false輸入: "{[]}"
輸出: true
思路:審題審題一定要審題,因為不審好題我走不少彎路。這道題最好的做法是使用棧來做,若拿到的是左邊的符號:‘(’, '[', '{',則入棧,若拿到的是右邊的符號,就判斷和棧頂是不是適配。 判斷適配的方式我們可以用一個map鍵值對來實現。若不適配則證明不符合,適配則把棧頂元素彈出。遍歷一次字串之後,判斷棧中還有沒有元素即可。
演算法程式碼:
bool isValid(string s) { map<char, char> validMap; validMap[')'] = '('; validMap[']'] = '['; validMap['}'] = '{'; if (s.length() == 0) return true; if (s.length() % 2 == 1) return false; stack<char> charStack; for (char &ch : s) { if (validMap.count(ch) == 0) { charStack.push(ch); continue; } if (charStack.empty() || charStack.top() != validMap[ch]) return false; charStack.pop(); } if (!charStack.empty()) return false; return true; }
邊界:
1.若字串為空則返回true
2.若字串的長度為單數,則返回false(不能構成兩兩配對)
3.在遇到右邊的符號的時候,先判斷棧是否為空,再判斷是否適配
測試結果: