中國大學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")

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章