20. Valid Parentheses
这道题225里写过欸。当时逻辑就比较混乱。
这是我的代码。哇打败了95.53%的人
#include <stack> using std::stack; class Solution { public: bool isValid(string s) { stack<char> myStack; for(int i=0;i<s.length();i++){ if(s[i]=='('||s[i]=='['||s[i]=='{'){ myStack.push(s[i]); } else if(myStack.empty() && (s[i]==')'||s[i]==']'||s[i]=='}')) return false; else if(myStack.top()=='(' && s[i]==')') myStack.pop(); else if(myStack.top()=='[' && s[i]==']') myStack.pop(); else if(myStack.top()=='{' && s[i]=='}') myStack.pop(); else return false; } if(myStack.empty()) return true; else return false; } };
有一个需要注意的点,如果我把代码里
else if(myStack.empty() && (s[i]==')'||s[i]==']'||s[i]=='}')) return false;
这段给删掉的话,在我想象中这也应该能合并为最后的else{}那块。但是在实践中 若test case是"}",理应输出为false,而我的代码就是没有输出结果的。
这主要是因为 如果没有这段话,假设input是 } ,那么第一个条件 if(s[i]=='('||s[i]=='['||s[i]=='{') 不符合,进入第二个条件判断,也就是 else if(myStack.top()=='(' && s[i]==')')。但是此时我的stack是空的!对于空的stack运用top()命令会导致segfault。所以stack是空的两种情况一定要在最初就进行判断。

浙公网安备 33010602011771号