队列queue和栈stack(数据结构)
找到光标,在它的左右两边分别用stack和queue即可,最后输出的时候记得用vector来存储并反转 ,还有注意stack用的是.top(),queue用的是.front()。出栈和出列都为.pop()
using namespace std;
#define int long long
const int N=2e5+10,M=100;
signed main()
{
int n,m;
int k;
char s[N];
string sen;
cin>>n>>k;
stack<char>q;
queue<char>w;
int cnt;
bool st=false;
for(int i=0;i<n;i++)
{
cin>>s[i];
if(s[i]=='I')
{st=true;continue;}
if(st!=true)
q.push(s[i]);
else w.push(s[i]);
}
for(int i=1;i<=k;i++)
{
cin>>sen;
if(sen=="backspace")
{
if(q.empty())continue;
else if(q.top()=='('&&w.front()==')')
{
q.pop(),w.pop();
}
else if(!q.empty())
{
q.pop();
}
}
else if(sen=="delete")
{
if(w.empty())continue;
else if(!w.empty())
{
w.pop();
}
}
}
vector<char> temp;
while(!q.empty())
{
temp.push_back(q.top());
q.pop();
}
for(int i = temp.size() - 1; i >= 0; i--)
{
cout << temp[i];
}
cout<<'I';
while(!w.empty())
{
cout<<w.front();
w.pop();
}
return 0;
}