2 条题解

  • 2
    @ 2024-10-23 17:13:40

    可以发现输入过程相当于把字母存入栈内,删除操作相当于弹出栈顶元素,可以分别用栈记录大写和小写字母的输入,读到删除操作弹出栈顶元素即可。

    #include<bits/stdc++.h>
    using namespace std;
    char s[1000005];
    char s1[1000005];
    int main()
    {
        int t;
        cin >> t;
        while(t--)
        {
          stack<int>o,p;//分别记录大小写
      
          scanf("%s",s);
          int l1=strlen(s);
          int num=0;
          for(int i=0;i<l1;i++)
          {
             if(s[i]=='b')//读到删除操作
             {
                if(o.size())//操作之前要判断栈是否为空,否则会运行错误(RE)
                {
                   s[o.top()]='0';//删除字母打上标记
                   o.pop();
                }
             }
             else if(s[i]=='B')//同上
             {
                 if(p.size())
                 {
                   s[p.top()]='0';
                   p.pop();
                 }
             }
             else if(s[i]>='a'&&s[i]<='z')//压入栈
             {
                o.push(i);
             }
             else
             {
                p.push(i);
             }
          }
          for(int i=0;i<l1;i++)//输出
          {
              if(s[i]!='0'&&s[i]!='B'&&s[i]!='b')cout <<s[i];
          }
          cout <<'\n';
    
    
        }
    }
    

    小小美,你不要再乱动我的电脑啦!!!

    信息

    ID
    1017
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    63
    已通过
    19
    上传者