跳至主要内容

20. Valid Parentheses

/*
* @lc app=leetcode id=20 lang=cpp
*
* [20] Valid Parentheses
*
* https://leetcode.com/problems/valid-parentheses/description/
*
* algorithms
* Easy (41.30%)
* Likes: 25708
* Dislikes: 1873
* Total Accepted: 6M
* Total Submissions: 14.3M
* Testcase Example: '"()"'
*
* 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.
* Every close bracket has a corresponding open bracket of the same type.
*
*
*
* Example 1:
*
*
* Input: s = "()"
*
* Output: true
*
*
* Example 2:
*
*
* Input: s = "()[]{}"
*
* Output: true
*
*
* Example 3:
*
*
* Input: s = "(]"
*
* Output: false
*
*
* Example 4:
*
*
* Input: s = "([])"
*
* Output: true
*
*
*
* Constraints:
*
*
* 1 <= s.length <= 10^4
* s consists of parentheses only '()[]{}'.
*
*
*/

// @lc code=start
class Solution {
public:
bool isValid(string s) {
unordered_map<char, char> closeToOpen = {
{')', '('},
{']', '['},
{'}', '{'},
};
stack<char> stk;
for (const auto& c : s) {
if (closeToOpen.count(c)) {
if (!stk.empty() && stk.top() == closeToOpen[c]) stk.pop();
else return false;
} else stk.push(c);
}
return stk.empty();
}
};
// @lc code=end
  • T: O(N)O(N)
  • S: O(N)O(N)