• 中国大学MOOC-数据结构与算法实战 P6 括号匹配 (15 分)


    检查一段C语言代码的小括号( )、 中括号 [ ] 和大括号{ } 是否匹配。

    输入格式:

    在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束)。

    输出格式:

    第一行输出左括号的数量和右括号的数量,中间以一个空格间隔。
    若括号是匹配的,在第二行打印YES,否则打印NO

    输入样例1:

    for(int i=0; i<v; i++){ visited[i] = 0; for(int j=0; j<v; j++) scanf("%d",&(g->Adj[i][j])); }
    

    输出样例1:

    8 8
    YES
    

    输入样例2:

    for(int i=0; i<v; i++) a(i]=0;
    

    输出样例2:

    2 2
    NO


    思路就是利用栈,先把左括号入栈,当扫描到右括号时,判断栈顶元素是否为左括号,是就出栈,不是则匹配失败。最后判断栈是否为空,空栈说明匹配成功,否则失败。
    代码如下:
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : 2019/10/30 21:47
    # @Author : Moewww
    # @File : P9.py
    # @Software:PyCharm
    strings = input()
    s = list()
    flag = 1
    n, m = 0, 0
    
    for ch in strings:
        # print(s)
        if ch == '(' or ch == '[' or ch == '{':
            n = n + 1
            s.append(ch)
        elif ch == ')' or ch == ']' or ch == '}':
            m = m + 1
            if s:
                if (ch == ')' and s[-1] == '(') or (ch == ']' and s[-1] == '[') or (ch == '}' and s[-1] == '{'):
                    s.pop()
            else:
                flag = 0
    print("{} {}".format(n, m))
    if flag == 1:
        if s:
            print("NO")
        else:
            print("YES")
    else:
        print("NO")
     

      

     
     
  • 相关阅读:
    c++跨平台技术学习(一)--使用公共的代码
    软件项目将死的27个征兆
    Java中的方法重载应用
    Java成员变量的初始化和在內存中的运行机制
    Java源文件结构和Java常用包
    细说Java访问控制符
    构造函数与this
    linux基础学习-6.3-DNS的配置文件
    linux基础学习-6.2-网卡配置文件
    linux基础学习-6.1-目录结构的特点
  • 原文地址:https://www.cnblogs.com/intbjw/p/11768403.html
Copyright © 2020-2023  润新知