菜鸟笔记
提升您的技术认知

面试题

实现一个LRU Cache 算法LRU Cache C++三种解法java实现LRU算法及编码实现LRU策略缓存LRU算法常见缓存算法和LRU的c++实现设计循环双端队列(deque)LRU 缓存结构 (c++ 哈希双链表实现)LRU缓存机制删除单链表中的指定节点Linux 内核经典面试题拼多多社招面经:Redis是重点,讲一讲redis的内存模型线程、进程、协程的区别C++经典面试题面试官:我们只想要这样的C++工程师Linux C/C++ 学习路线链表操作汇总C++11的智能指针面试题浏览器中输入url后发生的事情常用的限流算法HTTP协议和HTTPS协议面试题网络编程面试题目总结c++后台面试题目如何实现LRU算法?如何寻找无序数组中的第K大元素?布隆过滤器 - 如何在100个亿URL中快速判断某URL是否存在?如何实现大整数相加?C++面试题及基本知识点总结C++给定出栈序列判定是否合法消息队列面试题要点redis缓存击穿,失效以及热点key解决方案网页在浏览器上的渲染过程几种限流算法lru算法例题C/C++常见面试知识点总结附面试真题----20210529更新引入MQ消息队列的作用及其优缺点MySQL面试篇社招三年后端面试题60道测开面试题,背完直接涨工资二叉树的层序遍历(两种方法实现)Bitmap 海量数据处理字符串倒序输出的五种方法C语言 输入10个数,统计出并输出正数、负数和0的个数字节三面:如何设计一个高并发系统架构,网络 面试36问,DDos攻击原理C++线程池使用 C++11 编写可复用多线程任务池

C++给定出栈序列判定是否合法

阅读 : 1480

问题描述:

        对于给定入栈序列,不同的入栈出栈操作顺序,会产生不同的出栈序列,现给定出栈序列,判定其是否合法。

输入范例:

5 12345 54312,第一个数表示序列总数,第二个第三个分别表示入栈和出栈序列

期望输出:

判断出栈序列是否合法,输出合法,或者不合法。

示例代码:

#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;

int main()
{
	int total;
	string instr, outstr;
	stack<int> s;
	ifstream fin;
	fin.open("sequence.txt");
	fin >> total;
	fin >> instr;
	fin >> outstr;
	vector<int> vin, vout;
	for(int i = 0; i < instr.size(); i++)//设置入栈序列 
	{
		int num = instr[i] - '0';
		vin.push_back(num);
	}
	for(int i = 0; i < outstr.size(); i++)//设置出栈序列 
	{
		int num = outstr[i] - '0';
		vout.push_back(num);
	}
	int i = 0, j = 0;
	for(; i < total; i++)
	{
		s.push(vin[i]);
		while(!s.empty() && s.top() == vout[j])
		{
			s.pop();
			j++;
		}
	}
	
	if(i == j)
	{
		cout << "出栈序列合法" << endl;
	}
	else
	{
		cout << "出栈序列不合法" << endl; 
	}
	return 0;
}