1. 程式人生 > >括號匹配 (棧和佇列)

括號匹配 (棧和佇列)

題目描述:

假設一個算術表示式中可以包含三種括號:圓括號“(”和“)”,方括號“[”和“]”和花括號“{”和“ ”,且這三種括號可按任意的次序巢狀使用(如:…[…{… …[…]…]…[…]…(…)…)。編寫判別給定表示式中所含括號是否正確配對出現的演算法。輸出結果YES 或者 NO。

輸入

5+{[2X5]+2}

輸出

YES

樣例輸入

8-[{2+7]}

樣例輸出

NO

解題思路:利用棧的基本知識

程式碼如下:

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<stack>

#include<stdlib.h>

#include<math.h>

#define inf 1e6+5

using namespace std;

typedef long long ll;

void FindStack(char arr[])

{

stack<char>st;

int flag=1;

int num=strlen(arr);

for(int

i=0; i<num; i++)   //  具體括號匹配操作

{

switch(arr[i])

{

case '(':

st.push(arr[i]);

break;

case '[':

st.push(arr[i]);

break;

case '{':

st.push(arr[i]);

break;

case ')':

if(st.top()=='(')st.pop();

else flag=0;

break;

case ']':

if(st.top()==

'[')st.pop();

else flag=0;

break;

case '}':

if(st.top()=='{')st.pop();

else flag=0;

break;

}

}

if(!flag)

cout<<"NO"<<endl;

else

{

if(!st.empty())

cout<<"NO"<<endl;

else

cout<<"YES"<<endl;

}

return ;

}

int main()

{

char arr[1000];

scanf("%s",&arr);

FindStack(arr);

return 0;

}