0509第1题(虽然是08做的,但这会已经09了)
题目
Given a string containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
思路
- 直接用一个后进先出的stack来匹配就好
class Solution {
public:
bool isValid(string s) {
stack<char> mystack;
if(s.length()==1)
return false;
for(int i=0; i<s.length(); i++){
if(mystack.size()==0 & (s[i]==')' || s[i]=='}' || s[i]==']'))
return false;
else if(s[i]=='(' || s[i]=='{' || s[i]=='[')
mystack.push(s[i]);
else if(s[i]=='}' & mystack.top()=='{' & mystack.size()!=0)
mystack.pop();
else if(s[i]==']' & mystack.top()=='[' & mystack.size()!=0)
mystack.pop();
else if(s[i]==')' & mystack.top()=='(' & mystack.size()!=0)
mystack.pop();
else
return false;
}
if(mystack.size()==0)
return true;
else
return false;
}
};
然后在提交过程中,发现自己老是忘了各种特殊样例,还是要多刷题鸭!
加油,你是最胖的!
刚刚去偷瞄了大佬的答案,虽然runtime和memory和我差不多,但素人家的看起来很简洁啊!
class Solution {
public:
bool isValid(string s) {
stack<char> paren;
for (char& c : s) {
switch (c) {
case '(':
case '{':
case '[': paren.push(c); break;
case ')': if (paren.empty() || paren.top()!='(') return false; else paren.pop(); break;
case '}': if (paren.empty() || paren.top()!='{') return false; else paren.pop(); break;
case ']': if (paren.empty() || paren.top()!='[') return false; else paren.pop(); break;
default: ; // pass
}
}
return paren.empty() ;
}
};