close
內容
在本題中,題目會先給你一個包含小括號()及中括號〔〕的字串。當字串符合下列條件時我們稱他為正確的運算式:
- 該字串為一個空字串
- 如果A和B都為正確的運算式,則AB也為正確的運算式,
- 如果A為正確的運算式,則(A)及〔A〕都為正確的運算式。
現在,請你寫一支程式可以讀入這類字串並檢查它們是否為正確的運算式。字串的最大長度為128個字元。
輸入說明
輸入的第一列為正整數n,代表接下來有n列待測資料。
輸出說明
檢查每列待測資料,如果正確輸出Yes,否則輸出No。
範例輸入 #1
3 ([]) (([()]))) ([()[]()])()
範例輸出 #1
Yes No Yes
C++:
/* 3 ([]) (([()]))) ([()[]()])() */ #include <iostream> #include <stack> using namespace std; int main(){ int n; string s; cin>>n; getline(cin,s); //測資有一行為空格,要用getline讀空格,若為空格,字串長度為0,輸出yes while(n--){ stack <int> stk; getline(cin,s); if(s.size()==0){ cout<<"Yes\n"; continue; } for(int i=0;i<s.length();i++){ if(!stk.empty() && stk.top()=='(' && s[i]==')'){ stk.pop(); } else if(!stk.empty() && stk.top()=='[' && s[i]==']'){ stk.pop(); } else{ stk.push(s[i]); } } if(stk.size()==0){ cout<<"Yes\n"; } else{ cout<<"No\n"; } } return 0; }
Python:
""" 3 ([]) (([()]))) ([()[]()])() """ n=int(input()) for _ in range(n): stack=[] s=list(input()[::1]) while(s): p=s[0] if len(stack)>0 and p==']' and stack[-1]=="[": stack.pop() #print(11) elif len(stack)>0 and p==')' and stack[-1]=="(": stack.pop() #print(22) else: stack.append(p) #print(33) s.pop(0) if(len(stack)!=0):print("No") else:print("Yes")
文章標籤
全站熱搜
留言列表