题目:
判断一个表达式中括号是否配对(假设只包含圆括号)
思路:
- 使用栈:利用栈的特性来判断括号是否配对。
- 遍历字符串:遍历字符串中的每个字符。
- 如果遇到左括号
(
,将其压入栈中。 - 如果遇到右括号
)
,检查栈顶元素是否为左括号(
,如果是则弹出栈顶元素,否则返回false
。
- 如果遇到左括号
- 检查栈是否为空:遍历结束后,检查栈是否为空,为空则括号配对,否则不配对。
整体代码:
bool fun(stack<int> &s, string str) {
int i = 0; // 初始化索引 i
while (str[i] != '\0') { // 遍历字符串,直到遇到字符串结束符
switch (str[i]) {
case '(':
push(s, '('); // 将左括号压入栈中
break;
case ')':
if (pop(s) != '(') // 检查栈顶元素是否为左括号
return false; // 如果不匹配,返回 false
break;
}
++i; // 索引 i 自增
}
if (s.top == -1) // 检查栈是否为空
return true; // 栈为空,括号配对
else
return false; // 栈不为空,括号不配对
}
说明:
- 栈的使用:利用栈的特性来判断括号是否配对。
- 遍历字符串:遍历字符串中的每个字符。
- 如果遇到左括号
(
,将其压入栈中。 - 如果遇到右括号
)
,检查栈顶元素是否为左括号(
,如果是则弹出栈顶元素,否则返回false
。
- 如果遇到左括号
- 检查栈是否为空:遍历结束后,检查栈是否为空,为空则括号配对,否则不配对。