20. 有效的括号
给定一个只包括'('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
示例 4:
输入:s = "([)]" 输出:false
示例 5:
输入:s = "{[]}" 输出:true
提示:
1 <= s.length <= 104
-
s
仅由括号'()[]{}'
组成
#include <bits/stdc++.h> using namespace std; class Solution { public: bool isValid(string s) { if (s.length() % 2 != 0) { return false; } else { unordered_map <char, char> mapSign = { {')', '('}, {']', '['}, {'}', '{'}, }; stack<char> stk; for(char c : s) { // 右括号处理规则 if (mapSign.count(c)) { // 空栈 || 栈顶元素(左括号)与当前右括号不匹配 if (stk.empty() || stk.top() != mapSign[c]) { return false; } // 左右括号匹配正确,左括号顺序出栈 stk.pop(); } else { // 左括号入栈 stk.push(c); } } return stk.empty(); } } }; int main() { string s; while (cin >> s) { Solution solution; cout << solution.isValid(s) << endl; } return 0; }