题目:Nitori and Stack-Tech
来源:第二届太原理工大学程序设计新生赛决赛(重现赛)
解题思路
把桌上的 n
个零件从左到右依次放入栈中,并且在任意时刻,可以将若干个先前放进栈中的零件取出(需要按照“栈”的后入先出顺序),并从左到右在桌子上摆放出来。
是否可能将桌上物品的排列 s1
,通过上述操作,转化为另一种排列 s2
。
C++代码
#include<iostream> #include<stack> using namespace std; int main(){ int n; cin >> n; string s1, s2; cin >> s1 >> s2; stack<char> sta; int j = 0; bool flag = false; for(int i=0; i<n; ++i){ sta.push(s1[i]); while(!sta.empty() && j<n && sta.top()==s2[j]){ sta.pop(); ++j; } if(j == n){ flag = true; break; } } if(flag) cout << "Yes" << endl; else cout << "No" << endl; return 0; }