给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]" 输出:false
- #include
- #include
- #include
- using namespace std;
-
- /*
- * 用栈解决有效括号问题
- * 建立三种括号的联系,如果不是键,将元素压入栈中
- * 如果是键存在联系并且栈顶是相应的值,将栈顶元素弹出
- */
- bool isValid(string s) {
- int n = s.size();
- if (n % 2 == 1) {
- return false;
- }
- unordered_map<char, char> pairs = { {')','('},{']','['},{'}','{'} };
- stack<char> stk;
- for (char c : s) {
- if (pairs.count(c)) {
- if (stk.empty() || stk.top() != pairs[c]) {
- return false;
- }
- else {
- stk.pop();
- }
- }
- else {
- stk.push(c);
- }
- }
- return stk.empty();
- }
-
- int main() {
- string s = "()[]{}";
- bool ans = isValid(s);
- cout << boolalpha << ans << endl;
- return 0;
- }
用栈解决有效括号问题,建立三种括号的联系,如果不是键,将元素压入栈中;如果是键存在联系并且栈顶是相应的值,将栈顶元素弹出。
stack(栈)的用法:https://c.biancheng.net/view/478.html
unordered_map::count() 通过给定的 key 对 unordered_map 中存在的元素数量进行计数。