栈实现括号匹配
给定一个只包括'('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
示例 2:
示例 3:
提示:
1 <= s.length <= 104
s
仅由括号 '()[]{}'
组成
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <iostream> #include <stack>
using namespace std;
class Solution { public: bool isValid(string s) { string k = "([{)]}"; stack<char> stack1; int len = s.size(); if (len % 2 != 0) { return false; } for (int i = 0; i < len; i++) { if (!stack1.empty()) { int pos1 = k.find(s[i]); int pos2 = k.find(stack1.top()); if (pos2 <= 2 && pos1 == pos2 + 3) { stack1.pop(); continue; } } stack1.push(s[i]); } if (stack1.empty()) { return true; } return false; } };
int main() { Solution s; string str = "({[]()})"; cout << s.isValid(str); return 0; }
|