温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

检测出栈的合法性问题

发布时间:2020-06-20 04:37:04 来源:网络 阅读:851 作者:小止1995 栏目:编程语言

题目:给定一个入栈和一个出栈序列?请判断是否合法

eg:入栈12345,出栈35124

  1. 用一个辅助栈,如果栈为空,就push(入栈序列)

  2. 比较栈顶元素和出栈序列当前值是否相等,若相等,出栈此元素,并将下次访问出栈序列位置后移;否则,继续入入栈序列里的元素。

  3. 重复1,2步骤,直到入栈序列为空,且栈顶元素不等于出栈序列当前访问位置时即不合法。栈空,入栈序列空,出栈序列空为合法出栈。

此例中将3,5,取出后,明显1不是栈顶元素,所以不是合法的。

检测出栈的合法性问题

#include<iostream> #include<assert.h> #include<stack> using namespace std; bool IsLegal(const char* inOrder, const char* outOrder) {	assert(inOrder&&outOrder);	if (strlen(inOrder) != strlen(outOrder))	return false;	char* source = (char*)inOrder;	char* dest = (char*)outOrder;	stack<char> s;	char ch;	while (!s.empty() || *source != '\0')	{	while (!s.empty() && s.top()==*dest)	{	dest++;	s.pop();	}	if (*source == '\0')	break;	s.push(*source++);	}	if (*dest == '\0')	return true;	else	return false; } //法二 class Solution { public:     bool IsPopOrder(vector<int> pushV,vector<int> popV) {         if(pushV.size() == 0) return false;         vector<int> stack;         for(int i = 0,j = 0 ;i < pushV.size();){             stack.push_back(pushV[i++]);             while(j < popV.size() && stack.back() == popV[j]){                 stack.pop_back();                 j++;             }               }         return stack.empty();     } }; void Test1() {	cout << IsLegal("12345", "35124") << endl;	cout << IsLegal("12345", "54321") << endl;	cout << IsLegal("12345", "35421") << endl;	cout << IsLegal("12345", "23451") << endl;	cout << IsLegal("12345", "12345") << endl; }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI