看到這個題的時候我們是否會記起點什麼呢?是不是很熟悉的感覺呢,沒錯就是括號匹配問題。我們知道後會立馬想起一個數據結構---棧。
(1).我們需要借助一個棧來保存括號的左邊部分找到右邊的部分時,找出棧頂元素,若兩者匹配,則刪除棧頂元素,繼續下一輪遍歷。
(2).如果當前元素是括號的右邊部分,但是卻不合棧頂元素匹配,則說明整個匹配失敗。
(3).需要注意的是,棧空的情況。最後是通過棧是否為空來判斷是否全部匹配,但是若找到右邊括號的時候,棧是空的,那麼我們也是可以直接返回false的。
代碼如下:
class Solution { public: bool isValid(string s) { int len=s.size(); if(len == 0 ) { return true; } //定義一個棧結構來實現判斷 stack這道題並不難,所以我也就不多說什麼了S; int begin = 0; while(begin < len) { if(s[begin] == '(' || s[begin] == '{' || s[begin] == '[') { S.push(s[begin]); } else if(s[begin] == ')' || s[begin] == '}' || s[begin] == ']' ) { if(S.empty()) { //此時棧空可以說明不匹配 return false; } char tmpch = S.top(); if (s[begin] == ')' && tmpch == '(' || s[begin] == '}' && tmpch == '{' || s[begin] == ']' && tmpch == '[') { S.pop(); } else { return false; } } else { return false; } ++begin; } if(S.empty()) {//全部匹配了棧才會為空 return true; } return false; } };