Leetcode 20 -- 有效的括號
阿新 • • 發佈:2018-12-26
大致描述一下題目:
給定一個字串,只有'(' , ')' , '[', ']' , '{' , '}' 這六個字元,判斷是否是有效字串。
要求如下:
1. 左括號必須與對應的右括號閉合
2. 左括號以正確的順序閉合
3.空字串算有效字串
解題思路:
老套路沒啥好說的,用棧處理,類似於Leetcode的第九題 迴文數。
注意一些特殊的情況,比如字串長度是奇數,首字元是右括號肯定不是有效字串
附上程式碼如下(C++):
/******************************************************************************* Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved. File name: 020[有效的括號].cpp Author: Qiao Chuncheng Version: v1.0 Date: 2018-04-11 *******************************************************************************/ class Solution { public: bool isValid(string s) { bool flag = true; if (s.size() == 0) return true; //閱讀題目要求後發現空字串為有效字串 if (s.size() % 2 != 0) return false; if (s[0] == ')' || s[0] == ']' || s[0] == '}') return false; stack<char> strStack; for (size_t i = 0; i < s.size(); i++) { if (s[i] == '(' || s[i] == '[' || s[i] == '{') strStack.push(s[i]); else if (s[i] == ')') { if (strStack.top() != '(') return false; strStack.pop(); } else if (s[i] == ']') { if (strStack.top() != '[') return false; strStack.pop(); } else if (s[i] == '}') { if (strStack.top() != '{') return false; strStack.pop(); } } return strStack.empty(); } };