题目链接:HDU1022
题目大意: 给你两个n长度的字符串判断入栈的顺序和出栈的顺序是否一致!
思路(参考了别人):首先用栈把第一个字符串给压入栈中,在每一次压栈的同时用vis【】数组标记为入栈操作! 然后同时判断栈顶元素是否第二个串的首字符,如果判断成功则将栈顶元素抛出,同时指向第二个字符串的指针后移,!最后根据相应的数据,判读,并输出!
代码:
#include<bits/stdc++.h>
using namespace std;
const int N =2000;
int main(){
int n,vis[N];
char s[N],s2[N];
stack<char> a;
while(cin>>n>>s>>s2){
while(!a.empty()){ //清空栈!
a.pop();
}
memset(vis,0,sizeof(vis));
int j=0,k=0;
for(int i=0;i<n;i++){ //vis记录是进去还是出来!
a.push(s[i]);
vis[k++]=1;
while(!a.empty()&&a.top()==s2[j]){
a.pop();
vis[k++]=0;
j++;
}
}
if(j==n){
printf("Yes.\n");
for(int i=0;i<k;i++){
printf("%s\n",vis[i]?"in":"out");
}
printf("FINISH\n");
}
else printf("No.\nFINISH\n");
}
return 0;
}