、字串匹配問題
【問題描述】
字串中只含有括號 (),[],<>,{},判斷輸入的字串中括號是否匹配。如果括號有互相包含的形式,從內到外必須是<>,(),[],{},例如。輸入: [()] 輸出:YES,而輸入([]), ([])都應該輸出NO。
【輸入格式】strs.in
檔案的第一行為一個整數n,表示以下有多少個由括好組成的字串。接下來的n行,每行都是一個由括號組成的長度不超過255的字串。
【輸出格式】strs.out
在輸出檔案中有N行,每行都是YES或NO。
【輸入樣例】
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
【輸出標例】
YES
YES
YES
YES
NO
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char c[10000001]; 6 int topa=0; 7 int topb=0; 8 int topc=0; 9 int topd=0; 10 int main() 11 { 12 int n; 13 cin>>n; 14 for(int i=1;i<=n;i++) 15 { 16 int flag=1; 17 scanf("%s",&c); 18 for(int i=0;i<=strlen(c)-1;i++) 19 { 20 if(c[i]=='(') 21 topa++; 22 else if(c[i]=='[') 23 topb++; 24 else if(c[i]=='{') 25 topc++; 26 else if(c[i]=='<') 27 topd++; 28 else if(c[i]==')') 29 { 30 if(topa>0) 31 topa--; 32 else 33 { 34 cout<<"NO"<<endl; 35 flag=0; 36 break; 37 } 38 } 39 else if(c[i]==']') 40 { 41 if(topb>0) 42 topb--; 43 else 44 { 45 cout<<"NO"<<endl; 46 flag=0; 47 break; 48 } 49 } 50 else if(c[i]=='}') 51 { 52 if(topc>0) 53 topc--; 54 else 55 { 56 cout<<"NO"<<endl; 57 flag=0; 58 break; 59 } 60 } 61 else if(c[i]=='>') 62 { 63 if(topd>0) 64 topd--; 65 else 66 { 67 cout<<"NO"<<endl; 68 flag=0; 69 break; 70 } 71 } 72 } 73 if(flag==1) 74 { 75 if(topa==0&&topb==0&&topc==0&&topd==0) 76 cout<<"YES"<<endl; 77 else 78 cout<<"NO"<<endl; 79 } 80 81 } 82 83 return 0; 84 } 85