用哈希表和栈解决括号序列有效性的问题
先用哈希表来保存右括号和左括号的对应关系,设置一个栈保存左括号
对括号序列进行遍历,如果是左括号,则进栈,如果是右括号,判断是否栈空,栈空或栈顶元素不等于相应的右括号,则括号序列不合法,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();
}
};
京公网安备 11010502036488号