• 括号匹配问题(0962)


    描述

    假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。

    input

    由括号构成的字符串,包含”(“、”)“、”[“和”]“。

    output

    如果匹配输出YES,否则输出NO。

    样例输入

    [([][]())]

    样例输出

    YES

    这道题的思路是遇到左括号就入栈,遇到右括号就让栈顶元素出栈匹配,若匹配成功继续,若不成功则输出NO,若将字符串扫描完毕栈不为空,则说明匹配不成功

    代码如下

     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);//数据清零
    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  
  • 相关阅读:
    js获取当前网页的源码
    jquery实现点击图片全屏查看功能
    html查看大图、js查看大图
    【后端】SSM(Spring + SpringMVC + Mybatis)框架整合(二)
    【macOS】免费使用正版 Paragon NTFS for Mac(非破解)
    【后端】SSM(Spring + SpringMVC + Mybatis)框架整合(一)
    c# 自动生成N个随机数和为1
    分布式事务的解决方案
    【JUC】一些线程基础
    【工具】apng图像判定调研
  • 原文地址:https://www.cnblogs.com/swust-wangyf/p/6725196.html
Copyright © 2020-2023  润新知