zoukankan      html  css  js  c++  java
  • 题目1153:括号匹配问题(栈的使用)

    题目链接:http://ac.jobdu.com/problem.php?pid=1153

    详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus

    2017年07月27日22:25:45 郑鹏飞

    这里的括号匹配问题类似之前的常规问题。但是要求输出不匹配的括号的标记,同时结果不仅输出不匹配位置还要输出原来的字符串!

    因此为了标记不匹配的括号,同时为了区分左括号与右括号不匹配时的输出结果不相同,需要分别对其进行判断。

    因此需要判断每一个左括号是否有对应的右括号。

    如果左括号有相应匹配的右括号。那么就标记这两个位置的括号都是匹配的,可以设置为1。默认当前位置的括号都是不匹配的也就是0.

    此外,其他部分均与常规括号匹配一致,使用栈进行操作。

    左括号入栈(这里入栈的是左括号所在输入字符串的下标)

    遇到右括号,看栈是否为空,如果不为空,那么栈顶出栈。并且设置出站的下标对应的左括号是匹配的,设置相应的右括号的下标也是匹配的。

    因此需要栈保存下标

    需要数组保存对应下标括号是否匹配。

    最终输出时,进行遍历。当前位置为左括号并且不匹配则输出$,匹配则输出" " 即一个空格

    当前位置为右括号并且不匹配则输出?,匹配则输出" " 即一个空格

    遇到其他的不是括号的字符,全部输出" " 即一个空格。

    至此完成代码。 

    //
    //  1153 括号匹配问题.cpp
    //  Jobdu
    //
    //  Created by PengFei_Zheng on 08/04/2017.
    //  Copyright © 2017 PengFei_Zheng. All rights reserved.
    //
     
    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <stack>
     
    using namespace std;
     
    stack<int> l;
    char s[110];
     
    int main(){
        while(scanf("%s",s)!=EOF){
             
            int len = (int)strlen(s);
            int flag[len];
            memset(flag,0,sizeof(flag));
            while(!l.empty())
                l.pop();
            for(int i = 0 ; i < len ; i++){
                if(s[i]=='(')
                    l.push(i);
                else if(s[i]==')' && !l.empty()){
                    int temp = l.top();
                    l.pop();
                    flag[i]=1;
                    flag[temp]=1;
                }
            }
            printf("%s
    ",s);
            for(int i = 0 ; i < len ; i++){
                if(s[i]=='('){
                    if(flag[i]!=1)
                        printf("$");
                    else
                        printf(" ");
                }
                else if(s[i]==')'){
                    if(flag[i]!=1)
                        printf("?");
                    else
                        printf(" ");
                }
                else{
                    printf(" ");
                }
            }
            printf("
    ");
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1153
        User: zpfbuaa
        Language: C++
        Result: Accepted
        Time:0 ms
        Memory:1524 kb
    ****************************************************************/
  • 相关阅读:
    使用docker搭建gitlab版本控制系统
    Spring Boot与Docker部署
    CentOS7 使用yum命令安装Java SDK(openjdk)
    配置带用户权限的docker registry v2
    Docker搭建带有访问认证的私有仓库
    CentOS7 关闭防火墙
    CentOS7.2网络配置
    Docker Machine 简介
    docker的常用命令汇总
    实时查看docker容器日志
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6683106.html
Copyright © 2011-2022 走看看