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