LEETCODE(二)

有效的括號:

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

有效字符串需滿足:

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

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

輸入:“()”

輸出:true

輸入:“()[]{}”

輸出:true

思路:看大神們的思路,一種是利用棧來實現,也是最爲簡單的一種想法;另一種是用空白符替換成對的符合要求的括號()、[]、{},若最後字符串爲空,則是正確匹配的。

再用第一種方法實現的時候,真實r了,一直提示error:solution.cpp: In member function isValid
Line 5: Char 24: error: control reaches end of non-void function [-Werror=return-type]
         map<char,char> sss;
                        ^~~
cc1plus: some warnings being treated as errors

怎麼就到了函數結束呢?改了半天具體的操作,才發現是if-else沒有成對使用,若只使用if,那麼有些情況函數是沒有返回值的,這個就報錯了,哎,感覺自己sb了,但知道了就會發現原來自己debug的過程真的是缺少經驗呀,明明是查到了if-else相關的東西的,卻一直在糾結棧的實現思路。。。

class Solution{
    public:
        bool inValid(string s){
            map<char, char> Mytable;
            Mytable.insert(map<char, char>::value_type(')', '('));
            Mytable.insert(map<char, char>::value_type(']', '['));
            Mytable.insert(map<char, char>::value_type('}', '{'));
            stack<char> Mystack;
            for(int i=0; i!=s.size(); ++i){
                if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
                Mystack.push(s[i]);
                }
                else if(s[i]==')' || s[i]==']' || s[i]=='}'){
                if(Mystack.empty()) return false;
                if(Mytable[s[i]]==Mystack.top()){
                    Mystack.pop();
                    continue;
                }   
                else return false;
                }
            }
    if(Mystack.empty()) return true;
    else return false;    //此處一定要寫爲else語句,若是寫成if(!Mystack.empty()),就會造成有些情況沒有返回值,
//可能是自己的編程習慣不好吧(哭)
            
}
};

 

 

 

 

 

 

 

 

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