Given a string s
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.
Example 1:
Input: s = "()" Output: true
Example 2:
Input: s = "()[]{}" Output: true
Example 3:
Input: s = "(]" Output: false
Example 4:
Input: s = "([)]" Output: false
Example 5:
Input: s = "{[]}" Output: true
Constraints:
1 <= s.length <= 104
s
consists of parentheses only'()[]{}'
.
Similar Questions:
- Generate Parentheses (Medium)
- Longest Valid Parentheses (Hard)
- Remove Invalid Parentheses (Hard)
- Check If Word Is Valid After Substitutions (Medium)
// OJ: https://leetcode.com/problems/valid-parentheses/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(N)
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for (char c : s) {
if (c == '(' || c == '{' || c == '[') stk.push(c);
else if (stk.empty() || (c == ')' && stk.top() != '(') || (c == '}' && stk.top() != '{')
|| (c == ']' && stk.top() != '[')) return false;
else stk.pop();
}
return stk.empty();
}
};