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
    ****************************************************************/
  • 相关阅读:
    [Windows Azure] Windows Azure Web Sites, Cloud Services, and VMs: When to use which?
    [Windows Azure] Windows Azure Execution Models
    [Windows Azure] Load Testing in Windows Azure
    [Windows Azure]The Autoscaling Application Block
    [Windows Azure]Windows Azure Identity
    [Windows Azure] Data Management and Business Analytics
    alienware Win8 系统安装
    Navisworks Addin 插件集成
    Navisworks 2014 Api 简单的使用
    Winform简单调用WebApi
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6683106.html
Copyright © 2011-2022 走看看