按序列a进栈,问能不能按序列b出栈。
遍历b,如果当前元素进过栈了,那么必须和栈顶元素相同。如果没进过栈则按a序列压栈,直到遇到当前元素。
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
char ino[],outo[];
bool visited[];
char result[];
int n;
int main(){
int i,j;
stack<char > s;
while(scanf("%d%s%s",&n,ino,outo)!=EOF){
result[] = '\0';
while(!s.empty()) s.pop();
memset(visited,false,sizeof(visited));
for(i=,j=;i<n;i++){
if(!visited[outo[i]-'']){
for(;j<n;j++){
visited[ino[j]-''] = true;
strcat(result,"in\n");
if(ino[j]==outo[i]) {
strcat(result,"out\n");
j++;
break;
}
s.push(ino[j]);
}
}
else{
if(s.top()==outo[i]){
s.pop();
strcat(result,"out\n");
}
}
}
if(s.empty()) printf("Yes.\n%sFINISH\n",result);
else puts("No.\nFINISH");
}
return ;
}