1. 程式人生 > >nyoj2 括號配對問題

nyoj2 括號配對問題

描述
現在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料
每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),
測試資料組數少於5組。資料保證S中只含有"[", “]”, “(”, “)” 四種字元
輸出
每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入:

3
[(])
(])
([])

樣例輸出:

No
No
Yes

分析
首先經簡單分析,如果所有括號都配對,那麼字串的長度必定是偶數,所以先經過奇偶數判斷,如果長度為奇數可以直接輸出No。
如果字串長度是偶數,則進行如下操作:當字串不為‘空’時,遍歷字串,如果字串中存在‘[]’或者‘()’則將這部分從字串中刪除,並且更新字串。當字串的長度不為零時(即有的括號無法去除),則列印No
如果更新後的字串長度為0,則列印Yes
程式碼如下:

n=int(input())
for i in range(n):
    s=input()
    if len(s)%2!=0:
        print('No')
    else:
        while s!='':
            if '[]' in s:
                s=s.split('[]')
                s=''.join(s)
            elif '()' in s:
                s=s.split('()')
                s="".join(s) 
            elif '[]'or '()' not in s:
                print('No') 
                break
        if s=='':
            print('Yes')

不得不說,python有的時候真的挺方便的(笑哭.jpg)