题目大意:输入b则删除字符串的最后一个小写字母,输入B则删除字符串的最后一个大写字母,若没有则不删除。其他字母正常输入。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int da[N], xiao[N], a[N];
char s[N];
int main()
{
int t;
cin >> t;
while(t --)
{
cin >> s;
int q = 0, p = 0;
int n = strlen(s);
for(int i = 0; i < n; i ++)
{
if(s[i] == 'b')
{
if(q > 0)
{
a[xiao[q-1]] = 0;
q --;
}
}
if(s[i] == 'B')
{
if(p >= 0)
{
a[da[p-1]] = 0;
p --;
}
}
if(s[i] >= 'a' && s[i] <= 'z' && s[i] != 'b')
{
xiao[q] = i;
q ++;
a[i] = 1;
}
if(s[i] >= 'A' && s[i] <= 'Z' && s[i] != 'B')
{
da[p] = i;
p ++;
a[i] = 1;
}
}
for(int i = 0; i < n; i ++)
{
if(a[i]) cout << s[i];
}
cout << endl;
}
return 0;
}
一、大小写字母分开存
二、对下标进行处理和存储(因为最终输出仍按照输入的顺序)