每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
来源:互联网 发布:coc跑团软件 编辑:程序博客网 时间:2024/06/05 19:34
题目:
输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。
为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。
思路一:
对Pop系列进行遍历,借用一个Stack的变量Sim来记录入栈的变量,在遍历的过程中不断的优先去找栈顶元素进行比较,如果比较结果不相等接了去找Push系列中的元素进行比较,不相等就Push到Sim来,反复这样的操作直到遍历完Pop系列。
(如果我们希望pop 的数字正好是栈顶数字,直接pop 出栈即可;如果希望pop 的数字目前不在栈顶,我们就到push 序列中还没有被push 到栈里的数字中去搜索这个数字,并把在它之前的所有数字都push 进栈。如果所有的数字都被push 进栈仍然没有找到这个数字,表明该序列不可能是一个pop 序列。)
代码如下:
/*-----------------------------Copyright by yuucyf. 2011.08.17------------------------------*/#include "stdafx.h"#include <iostream>#include <stack>using namespace std;bool IsPopSeries(const char *pszPushSeries, const char *pszPopSeries){if (NULL == pszPushSeries || NULL == pszPopSeries)return false;int i32PushLen= strlen(pszPushSeries);int i32PopLen = strlen(pszPopSeries);stack<int> stackSim;int i32I = 0, i32J = 0;int i32TempElem = 0;bool bFind = false;for (i32I = 0; i32I < i32PopLen; i32I++){bFind = false;for (; i32J < i32PushLen; i32J++){if (!stackSim.empty()){if (stackSim.top() == pszPopSeries[i32I]){stackSim.pop();break;}}if (pszPopSeries[i32I] != pszPushSeries[i32J])stackSim.push(pszPushSeries[i32J]);else{bFind = true;i32J++;break;}}if (!stackSim.empty() && i32J >= i32PushLen && !bFind){i32TempElem = stackSim.top();stackSim.pop();if (i32TempElem != pszPopSeries[i32I])return false;}}return true;}int _tmain(int argc, _TCHAR* argv[]){char aszPushSeries[] = "12345";char aszPopSeries[] = "12345";cout << "push系列为" << aszPushSeries << ",那么系列" << aszPopSeries << "是否是它的一个Pop系列?(1是0不是)" << endl;cout << IsPopSeries(aszPushSeries, aszPopSeries) << endl;return 0;}
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 【算法】输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。 为了简单起见,我们假设push序列的任意两个整数都是不相等的
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 题目:输入两个整数序列。其中一表示栈的 push 顺序,判断另一个序列有没可能是对应的 pop 顺序
- 输入两个整数序列。其中一个序列表示栈的push顺序
- 谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 使用Zend框架实现PHP文件上传
- maven中pom.xml 文件 的Scope的作用
- maven寻找公共jar库的地址
- 大型网站系统架构分析
- Oracle 逻辑结构简介
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 发现Java虚拟机内存泄露问题
- DP.單調隊列::poj1631 Bridging signals
- 无锁机制的循环缓冲技术
- VS2008 Sp1出现程序清单中的版本和编译器的版本不一致的解决办法
- jquery 控件
- SSH框架整合的核心
- asp.net XML导入数据库(3)
- 借用FMS做为游戏服务端的main.asc代码编写样例