文章

18

粉丝

183

获赞

57

访问

102.5k

头像
1501 括号匹配 栈经典题
推荐阅读
P1501 西北工业大学2015机试题
发布于2022年7月31日 17:49
阅读数 5.6k

这是数据结构栈的经典题目

思路如下:

  • 判断输入字符串的每一个字符
    • 如果为左括号,则无脑入栈
    • 如果为右括号,则从栈尾取出最近一次入栈的左括号,看是否匹配
      • 若匹配,则继续下一次迭代,且该左括号出栈
      • 若不匹配,直接返回false
  • 判断栈是否为空
    • 若栈为空,两种情况
      • 整个字符串无左括号,即未有元素入栈。这是一个坑。如果直接忽略这种情况,不做检验,输入“}]]”这种字符串也能通过。所以,我们在取栈内元素进行匹配时,首先判断栈是否为空。若为空直接返回false,即能解决这一种状况。
      • 所有括号已经正确匹配,返回true

代码如下:


// 括号匹配,栈经典问题
#include <bits/stdc++.h>

using namespace std;

bool match(string str)
{
    stack<char> s;

    for (int i = 0; i < str.length(); i++)
    {
        char cur_c = str[i];

        switch (cur_c)
        {
            //左括弧,无脑入栈
        case '(':
            s.push(cur_c);
            break;
        case '[':
            s.push(cur_c);
            break;
            //右括弧,取最近入栈的做括弧进行匹配
        case ')':
            if (!s.empty() && s.top() == '(')
                s.pop();
            else
                return false;
            break;
        case ']':
     ...
登录查看完整内容


登录后发布评论

1 条评论
爱在西元前
2023年12月10日 13:45

学习了

赞(0)