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()),就会造成有些情况没有返回值,
//可能是自己的编程习惯不好吧(哭)
            
}
};

 

 

 

 

 

 

 

 

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