zoukankan      html  css  js  c++  java
  • 括号匹配

    总时间限制:1000ms 内存限制: 65536kB

    描述

    假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.

    输入一串括号

    如果输入的右括号多余,输出:Extra right brackets
    如果输入的左括号多余, 输出:Extra left brackets
    如果输入的括号不匹配,输出:Brackets not match
    如果输入的括号匹配,输出:Brackets match

    输入

    {{{{)))

    输出

    Brackets not match

    样例输入

    {([)]}

    样例输出

    Brackets not match


    ps.优先匹配原则...

    参考来源

    ac代码

    /*
    @File     :   match_bracket_1.cpp
    @Time     :   2020/03/25 20:16:07
    @Desc     :   括号匹配(栈实现)
    */
    #include <iostream>
    #include <stdlib.h>
    #define MAX_LEN 50
    
    using namespace std;
    
    //栈
    typedef struct 
    {
        char data[MAX_LEN];
        int top;
    }Stack;
    //初始化
    void InitStack(Stack *&stack);
    //压栈
    bool Push(Stack *&stack, const char num);
    //弹栈
    bool Pop(Stack *&stack);
    //栈是否为空
    bool Empty(const Stack *stack);
    //获取栈顶
    bool get_top(const Stack *stack, char &top);
    //判断代码
    int JudgeCode(const string str);
    int main(int argc, char const *argv[])
    {
        string s;
        cin >> s;
        switch (JudgeCode(s))
        {
            case 1:
               cout << "Brackets match";
               break;
            case 2:
               cout << "Extra left brackets";
               break;
            case 3:
               cout << "Extra right brackets";
               break;
            case 4:
               cout << "Brackets not match";
               break;
         }
        system("pause");
        return 0;
    }
    void InitStack(Stack *&stack)
    {
        stack = (Stack*)malloc(sizeof(Stack));
        stack->top = -1;
    }
    bool Push(Stack *&stack, const char num)
    {
        if (stack->top == MAX_LEN - 1) return false;
        stack->top++;
        stack->data[stack->top]  = num;
        return true;
    }
    bool Pop(Stack *&stack)
    {
        if (Empty(stack)) return false;
        stack->top--;
        return true;
    }
    bool Empty(const Stack *stack)
    {
        return (stack->top == -1);
    }
    bool get_top(const Stack *stack, char &top)
    {
        if (Empty(stack)) return false;
        top = stack->data[stack->top];
        return true;
    }
    int JudgeCode(const string str)
    {                                       //括号匹配和回文匹配是不一样的
        Stack *stack;
        int l = 0, r = 0;
        char top;
        InitStack(stack);
        for (int i = 0; i < str.size(); i++) {
            if (get_top(stack,top)) {
                if ((top == '('&&str[i] == ')')||(top == '['&&str[i] == ']')||(top == '{'&&str[i] == '}')) Pop(stack);
                else Push(stack,str[i]);
            }
             else Push(stack,str[i]);
        }
       if (Empty(stack)) return 1;
       while (!Empty(stack)) {
           get_top(stack,top);
           if(top == '('||top == '['||top == '{') l++;
           if(top == ')'||top == ']'||top == '}') r++;
           Pop(stack);
       }
       if (l>0&&r==0) return 2;
       if (l==0&&r>0) return 3;
       if (l>0&&r>0)  return 4;
    }
    
  • 相关阅读:
    CSS样式
    Python宏观
    javaScript----------(函数)
    vue-----5计算属性
    python之函数作用域、嵌套以及闭包
    python之函数的定义、传参以及动态参数
    python之文件操作
    基础数据类型的补充以及深浅copy
    小数据池、代码块以及编码转换
    python基础二
  • 原文地址:https://www.cnblogs.com/levarz/p/12781521.html
Copyright © 2011-2022 走看看