题目: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;
}
京公网安备 11010502036488号