中国大学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")
 

  

 

 

 

 

posted @ 2019-10-30 22:20  int_bjw97  阅读(834)  评论(0编辑  收藏  举报