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';
    
    
        }
    }
    
    • 2
      @ 2024-10-20 19:09:57

      一道比较简单的模拟题,从后往前进行遍历,当遇到删除字符 bbBB 时,记录下来,当遇到其他字符时根据记录情况进行删除。

      #include <stdio.h>
      #include <iostream>
      #include <string.h>
      using namespace std;
      const int N = 1e6 + 9;
      char ai[N];
      
      int main() {
          int t, sum1, sum2;
          scanf("%d", &t);
          while(t --) {
              sum1 = 0;
              sum2 = 0;
              scanf("%s", ai);
              int len = strlen(ai);
              for(int i = len - 1; i >= 0; i --) {
                  if(ai[i] == 'b') sum1 ++;
                  if(ai[i] == 'B') sum2 ++;
                  if(sum1 > 0 && ai[i] >= 'a' && ai[i] <= 'z' && ai[i] != 'b') {
                      ai[i] = '0';
                      sum1 --;
                  }
                  if(sum2 > 0 && ai[i] >= 'A' && ai[i] <= 'Z' && ai[i] != 'B') {
                      ai[i] = '0';
                      sum2 --;
                  }
              }
      
              for(int i = 0; i < len; i ++) {
                  if(ai[i] != '0' && ai[i] != 'b' && ai[i] != 'B') {
                      printf("%c", ai[i]);
                  }
              }
              printf("\n");
          }
          return 0;
      }
      
    • 1

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

    信息

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