题目大意:

给你一个n 代表有n列 火车,  第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序,

分析一下就知道这,这个问题就是栈, 先进后出吗, 就是问你这个编号有没有可能出现, 有可能的话输出顺序,没可能直接输出No

题目分析:

我们用栈进行模拟, 先判断是否有这种出栈的可能, 假如有这种可能的话我们在模拟 一遍出栈的顺就行了。

每一次有新元素入栈我们就判断他是否雨 第二个字符串的第一个元素是否相等, 假如一样, 就让次元素出栈。

代码

 #include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack>
using namespace std;
#define maxn 15 bool OK(char str1[], char str2[],int n)//判断是否存在这种出栈的可能
{
stack<char> P;
P.push('#');//因为有元素要删除赋值, 不能为空, 我们让第一个元素为‘#’
char ans;
int i, j;
for(i=, j=; i<n; i++)
{
P.push(str1[i]);
ans = P.top();
while(ans == str2[j] )
{
P.pop();
j ++;
ans = P.top();//此处是要赋值判断的, 假如为空的话就无法赋值, 因此我们让第一个元素为‘#’
}
}
if(j == n)
return true;
return false;
} void Putt(char str1[], char str2[],int n)
{
stack<char> P;
P.push('#');
for(int i=, j=; i<n; i++)
{
P.push(str1[i]);
printf("in\n");
char ans = P.top();
while(ans == str2[j])
{
P.pop();
printf("out\n");
j ++;
ans = P.top();
}
}
}
int main()
{
int n;
char str1[maxn], str2[maxn];
while(cin >> n >> str1 >> str2)
{
if(OK(str1, str2, n) )
{
printf("Yes.\n");
Putt(str1,str2,n);
}
else
printf("No.\n"); printf("FINISH\n");
}
return ;
}

最新文章

  1. VB中键盘每个按键所对应的具体数值是?
  2. Android&mdash;&mdash;组件简介
  3. js一些小题(二)
  4. [ubuntu]deb软件源
  5. Ajax的简单请求案例
  6. 说Win7激活
  7. 再也不要说,jquery动画呆板了
  8. boost linux 下安装
  9. 优化函数式编程:向 PHP 移植 Clojure 函数
  10. Jmeter安装设置
  11. 查看Linux连接数
  12. 201521123011《Java程序设计》第11周学习总结
  13. Pycharm下面出现No R interpreter defined
  14. Linux基础学习(2)--Linux系统安装
  15. 【转】Android AlertDialog自定义布局
  16. sap 给集团分配一个逻辑系统
  17. win10+wget 收藏
  18. [PLC]ST语言五:STL/RET/CMP/ZCP
  19. 如何在Linux上面安装GCC 4.1.2
  20. Apache Sqoop 结构化、非结构化数据转换工具

热门文章

  1. umlの用例图
  2. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(2)
  3. Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等
  4. [转] Git 分支 - 分支的新建与合并
  5. Python可迭代对象、迭代器和生成器
  6. MemCachedClient数据写入的三个方法
  7. 利用GDB在远程开发机进行调试
  8. bc命令详解与实例
  9. 各种driver的继承关系
  10. 自动化构建工具gulp