close
內容

在本題中,題目會先給你一個包含小括號()及中括號〔〕的字串。當字串符合下列條件時我們稱他為正確的運算式:

  1. 該字串為一個空字串
  2. 如果A和B都為正確的運算式,則AB也為正確的運算式,
  3. 如果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")
            



 

arrow
arrow
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()