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.
Use a stack to help matching
C++ Code:
/*
* func: valid_parentheses
* goal: to check if parentheses in current string match
* @param s: input string
* return: true or false
*/
/*
* Use stack
* complexity: time O(n), space O(n)
*/
bool valid_parentheses(const string &s){
stack<char> stk;
for(auto it = s.cbegin(); it != s.cend(); ++it){
if(*it == '(' || *it == '[' || *it == '{'){
stk.emplace(*it);
}else if(!stk.empty()){
if(*it == ')' && stk.top() == '('){
stk.pop();
}else if(*it == ']' && stk.top() == '['){
stk.pop();
}else if(*it == '}' && stk.top() == '{'){
stk.pop();
}else{
return false;
}
}else{
return false;
}
}
if(stk.empty()){
return true;
}else{
return false;
}
}
Python Code:
# func: to check if parentheses in the string match
# @param s: input string
# @return: True or False
# complexity: time O(n), space O(n)
def valid_parentheses(s):
if not s:
return False
else:
stack = []
for parenthesis in s:
if parenthesis in '([{':
stack.append(parenthesis)
elif stack and (parenthesis == ']' and stack[-1] == '['
or parenthesis == ')' and stack[-1] == '(' or
parenthesis == '}' and stack[-1] == '{'):
stack = stack[:-1]
else:
return False
if not stack:
return True
else:
return False
No comments:
Post a Comment