括号匹配问题(0962)
生活随笔
收集整理的這篇文章主要介紹了
括号匹配问题(0962)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
描述
假設(shè)表達(dá)式中允許包含兩種括號(hào):圓括號(hào)和方括號(hào)。編寫一個(gè)算法判斷表達(dá)式中的括號(hào)是否正確配對(duì)。
input
由括號(hào)構(gòu)成的字符串,包含”(“、”)“、”[“和”]“。
output
如果匹配輸出YES,否則輸出NO。
樣例輸入
[([][]())]
樣例輸出
YES
?
這道題的思路是遇到左括號(hào)就入棧,遇到右括號(hào)就讓棧頂元素出棧匹配,若匹配成功繼續(xù),若不成功則輸出NO,若將字符串掃描完畢棧不為空,則說(shuō)明匹配不成功
?
代碼如下
1 #include<iostream> 2 #include<algorithm> 3 #include<memory.h> 4 #include<string.h> 5 using std::cin; 6 using std::cout; 7 using std::endl; 8 using std::sort; 9 10 #define N 100 11 struct Stack { 12 char date[N]; 13 int top; 14 } stack; 15 //棧初始化 16 void init(Stack *stack) { 17 stack->top=-1; 18 memset(stack->date,0,sizeof(char)*N);//數(shù)據(jù)清零 19 } 20 21 bool isempty(Stack*stack) { //判斷是否為空 22 return stack->top==-1; 23 } 24 bool isfull(Stack*stack)//判斷棧溢出 25 { 26 return stack->top==N-1; 27 } 28 int gettop(Stack*stack)//獲取棧頂 29 { 30 return stack->date[stack->top]; 31 } 32 void push(Stack*stack,char a)//壓棧 33 { 34 if(isfull(stack)){ 35 return; 36 }else{ 37 stack->top++; 38 stack->date[stack->top]=a; 39 } 40 41 } 42 void pop(Stack*stack)//吐 43 { 44 if(isempty(stack)){ 45 return; 46 }else{ 47 stack->top--; 48 } 49 } 50 bool isleft(char a){ 51 return (a=='(')||(a=='['); 52 } 53 bool isright(char a){ 54 return (a==']')||(a==')'); 55 } 56 bool juge(char a,char b){ 57 return (a=='('&&b==')')||(a=='['&&b==']'); 58 } 59 int main(){ 60 Stack stack; 61 init(&stack); 62 char str[100]; 63 cin>>str; 64 int len=strlen(str); 65 for(int i=0;i<len;i++){ 66 if(isleft(str[i])){ 67 push(&stack,str[i]); 68 }else { 69 if(isright(str[i])){ 70 if(!juge(stack.date[stack.top],str[i])){ 71 cout<<"NO"; 72 return 0; 73 } 74 pop(&stack); 75 } 76 } 77 } 78 cout<<"YES"; 79 return 0; 80 } 81 82?
轉(zhuǎn)載于:https://www.cnblogs.com/swust-wangyf/p/6725196.html
總結(jié)
以上是生活随笔為你收集整理的括号匹配问题(0962)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数组中子数组求最大和
- 下一篇: 第八章-错误调试