用哈希表和栈解决括号序列有效性的问题
先用哈希表来保存右括号和左括号的对应关系,设置一个栈保存左括号
对括号序列进行遍历,如果是左括号,则进栈,如果是右括号,判断是否栈空,栈空或栈顶元素不等于相应的右括号,则括号序列不合法,return false;
遍历完后,如果栈空,则有效,栈非空,说明栈中的左括号没有得到匹配的右括号,则括号序列无效。
class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) { // write code here // s: "{}([" unordered_map<char, char> charmap{{'}', '{'}, {']', '['}, {')', '('}}; // 哈希表可以直接用大括号进行初始化 stack<char> stk; for (int i = 0; i < s.size(); i++) { if (charmap.count(s[i])) { // 如果是右括号,则出栈,并判断是否是相应的左括号,不是则退出 if (stk.empty() || charmap[s[i]] != stk.top()) { return false; } else { stk.pop(); } } else { // 左括号,直接入栈 stk.push(s[i]); } } return stk.empty(); } };