zoukankan      html  css  js  c++  java
  • 括号匹配 Learner

    问题描述

    蒜头君在纸上写了一个串,只包含’(‘和’)’。一个’(‘能唯一匹配一个’)’,但是一个匹配的’(‘必须出现在’)’之前。请判断蒜头君写的字符串能否括号完全匹配,如果能,输出配对的括号的位置(匹配的括号不可以交叉,只能嵌套)。 
    输入格式 
    一行输入一个字符串只含有’(‘和’)’,输入的字符串长度不大于50000。 
    输出格式 
    如果输入括号不能匹配,输出一行”No”,否则输出一行”Yes”,接下里若干行每行输出 2 个整数,用空格隔开,表示所有匹配对的括号的位置(下标从 1 开始)。你可以按照任意顺序输出。 
    本题答案不唯一,符合要求的答案均正确 
    样例输入 
    ()() 
    样例输出 
    Yes 
    1 2 
    3 4

     1 #include<iostream>
     2 #include<stack>
     3 using namespace std;
     4 struct record{
     5     char c;
     6     int i;//方便记录下标,但是容易浪费空间
     7 };
     8 int arr[25000][2],t=0;
     9 char str[50000];
    10 stack<record> st;
    11 int main(){
    12     char ch;
    13     int i=0;
    14     gets(str);
    15     while (str[i])
    16     {
    17         if (str[i]=='('){
    18             //stack中只保存(,节省空间
    19             record obj;
    20             obj.c=str[i];
    21             obj.i=i+1;
    22             st.push(obj);
    23         }
    24         //找到第一个) ,对其进行处理,判断stack里面是否有可以匹配的(,若无,则stack为空,不满足条件
    25         if (str[i]==')')
    26         {
    27             if (st.empty())
    28             {
    29                 //数据  (())))))
    30                 cout<<"No";
    31                 return 0;
    32             }
    33             arr[t][0]=st.top().i;//取栈顶元素,获得标号
    34             arr[t++][1]=i+1;
    35             // cout<<arr[t-1][0]<<" "<<arr[t-1][1]<<endl;
    36             st.pop();//弹出栈顶元素
    37         }
    38         i++;
    39     }
    40     if (st.empty())
    41     {
    42         //数据 (((())))
    43         cout<<"Yes"<<endl;
    44         for (int j = 0; j < t; j++)
    45         {
    46             cout<<arr[j][0]<<" "<<arr[j][1]<<endl;
    47         }
    48     }else
    49     {
    50         //  数据   (()
    51         cout<<"No"<<endl;
    52     }    
    53 }

     

    因上求缘,果上努力~~~~ 作者:Learner-,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12670857.html

  • 相关阅读:
    NAVICAT 拒绝链接的问题
    .net垃圾回收-原理浅析
    C#中标准Dispose模式的实现
    Windbg调试托管代码
    C#泛型基础
    .Net垃圾回收和大对象处理
    C++ 小知识点
    C++之虚函数表
    C++之指针与引用,函数和数组
    C++之const关键字
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12670857.html
Copyright © 2011-2022 走看看