#include <iostream>
#include <string>
using namespace std;
string stack,requare,start,newStr;
string table;
int num=0,i=0;
void check(string& start,string& stack);
void print(){
if(newStr==requare)
cout<<table<<endl;
}
void pushStack(char item,string& start,string& stack){
table+='i';
stack+=item;
check(start,stack);
}
void popStack(string& start,string& stack){
table+='o';
newStr+=stack[stack.size()-1];
stack.erase(stack.size()-1);
check(start,stack);
}
void delPush(){
table.erase(table.size()-1);
stack.erase(stack.size()-1);
}
void delPop(){
stack+=newStr[newStr.size()-1];
table.erase(table.size()-1);
newStr.erase(newStr.size()-1);
}
void check(string& start,string& stack){
if (num==start.size()*2) {
print();
return;
}
if((newStr.size()+stack.size())!=start.size()){
num++;
pushStack(start[i++],start,stack);
delPush();
num--;
i--;
}
if(stack.empty()&&i<start.size()) return;
num++;
popStack(start,stack);
delPop();
num--;
}
int main(){
cin>>start>>requare;
check(start,stack);
return 0;
}
很不规范的地柜,还有好多个清理状态的函数。。。
什么时候才能改进阿!!!!!!!!