用栈判断表达式中的括号是否匹配
时间: 2023-10-01 08:05:52 浏览: 185
算法思路:
1. 遍历表达式中的每个字符;
2. 如果遇到左括号(即“(”、“{”或“[”),则将其压入栈中;
3. 如果遇到右括号(即“)”、“}”或“]”),则弹出栈顶元素,与当前右括号进行匹配;
4. 如果匹配成功,则继续遍历下一个字符;
5. 如果匹配失败,则说明表达式中的括号不匹配,直接返回false;
6. 如果遍历完成后,栈为空,则说明表达式中所有括号都有匹配的左右括号,返回true;
7. 如果遍历完成后,栈不为空,则说明表达式中有左括号没有匹配的右括号,返回false。
代码实现:
```
bool isBalanced(string s) {
stack<char> st;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
st.push(s[i]);
} else if (s[i] == ')' || s[i] == '}' || s[i] == ']') {
if (st.empty()) {
return false;
}
char c = st.top();
st.pop();
if ((s[i] == ')' && c != '(') ||
(s[i] == '}' && c != '{') ||
(s[i] == ']' && c != '[')) {
return false;
}
}
}
return st.empty();
}
```
阅读全文