中国大学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")
一只土拨鼠。