檢查一段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")
