LeetCode刷题记录——20有效的括号
一 题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效的字符串需要满足:
1. 左括号必须使用相同类型的右括号闭合
2. 左括号必须以正确的顺序闭合
注意空字符串可以被认为是有效的字符串
-
示例:
-
输入: "()" 输出: true 输入: "()[]{}" 输出: true 输入: "(]" 输出: false 输入: "([)]" 输出: false 输入: "{[]}" 输出: true
-
二 思路:
-
采用堆栈的形式,将括号依次压入栈中,当出现了临近的一对括号时,就pop出去,不断地将括号push进来,最后结束之后,看栈中是否还剩有元素,有的话就表明false
-
代码:
-
bool isValid(string s) { unordered_map<char, int> m{ {'(',1},{'[',2},{'{',3},{')',4},{']',5},{'}',6} }; stack<char> st; bool istrue = true; for (char c : s) { int flag = m[c]; if (flag >= 1 && flag <= 3) st.push(c); else if (!st.empty() && m[st.top()] == flag - 3) st.pop(); else { istrue = false; break; } } if (!st.empty()) istrue = false; return istrue; }
-