这题属于模拟题,但有一个地方较难处理——操作4,undo(),之所以这么说是因为如果你仔细看案例的话会发现,它倒退可以连续倒退多次,而不是一次。
我最开始是按照只能倒退一次来写的,那样就很easy了,单独定义string类型变量s1,用来记录每次操作前的s0;但测试案例的时候我就发现了问题,也间接暴露了自己没有好好看案例的事实。
所有怎么样才能每次操作都记录下来呢?定义多个string类型的数组?也许是可以的,但是会很麻烦。栈——在这里不是很恰当嘛!每次操作都是对栈顶进行,同时每次操作完都压栈,如果遇到操作4,就直接弹栈,这样就恢复了。
是不是非常Amazing!
using namespace std;
#include<bits/stdc++.h>
int main(){
ios::sync_with_stdio(false);
int q,t,k;
while(cin>>q)
{
string str,x;
stack<string> s;
s.push("");
for(int i=1;i<=q;i++)
{
cin>>t;
if(t == 1)
{
cin>>x;
s.push(s.top()+x);
}
else if(t == 2)
{
cin>>k;
x=s.top();
s.push(x.substr(0,x.length()-k));
}
else if(t == 3)
{
cin>>k;
x=s.top();
cout<<x[k-1]<<"\n";
}
else if(t == 4)
{
s.pop();
}
}
}
return 0;
}