Leetcode上有道题:点击打开链接
20
.
Valid Parentheses
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
AC很简单:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
int len=s.length();
int cur=0;
if(s.empty()||len%2!=0)
return false;
while(cur<len){
if(s[cur]=='('||s[cur]=='{'||s[cur]=='['){
stk.push(s[cur++]);
}
else{
if(s[cur]==')'&&!stk.empty()&&stk.top()=='('){
stk.pop();
cur++;
}
else if(s[cur]=='}'&&!stk.empty()&&stk.top()=='{'){
stk.pop();
cur++;
}
else if(s[cur]==']'&&!stk.empty()&&stk.top()=='['){
stk.pop();
cur++;
}
else{
return false;
}
}
}
return (stk.empty())?true:false;
}
};
自作聪明改了一下:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
int len=s.length();
int cur=0;
if(s.empty()||len%2!=0)
return false;
while(cur<len){
if(s[cur]=='('||s[cur]=='{'||s[cur]=='['){
stk.push(s[cur++]);
}
else{
if(s[cur++]==')'&&!stk.empty()&&stk.top()=='('){
stk.pop();
//cur++;
}
else if(s[cur++]=='}'&&!stk.empty()&&stk.top()=='{'){
stk.pop();
//cur++;
}
else if(s[cur++]==']'&&!stk.empty()&&stk.top()=='['){
stk.pop();
//cur++;
}
else{
return false;
}
}
}
return (stk.empty())?true:false;
}
};
错掉了。。其实错得很荒唐=。=,两份代码根本不等价,第二份到了else,进来啊就做++,导致cur的值变了。
哎。。这样的错误我居然还迷糊了很久。。非常悲伤。。