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.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
解题思路:栈的典型用法
class Solution {
public:
bool isValid(string s) {
stack<char>istrue;
for(int i=0;i<s.length();i++){
switch(s[i]){
case '(':{istrue.push('(');break;}
case '[':{istrue.push('[');break;}
case '{':{istrue.push('{');break;}
case ')':{
if(istrue.size()==0||istrue.top()!='(')
return false;
istrue.pop();
break;
}
case ']':{
if(istrue.size()==0||istrue.top()!='[')
return false;
istrue.pop();
break;
}
case '}':{
if(istrue.size()==0||istrue.top()!='{')
return false;
istrue.pop();
break;
}
}
}
return istrue.size() == 0;
}
};
Python
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
myStack = []
for c in s:
if c == '(' or c == '[' or c == '{' :
myStack.append(c)
elif c == ')':
if len(myStack) > 0 and myStack[-1] == '(':
del myStack[-1]
else:
return False
elif c == '}':
if len(myStack) > 0 and myStack[-1] == '{':
del myStack[-1]
else:
return False
else:
if len(myStack) > 0 and myStack[-1] == '[':
del myStack[-1]
else:
return False
return not myStack