判断出栈顺序合法性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我通常是按照下面的方法来判断的:
假如入栈顺序为1234,给定一个出栈序列,如2431,它是合法的。
因为对于出栈序列中的每一个数字,在它后面的、比它小的所有数字,一定是按递减顺序排列的。
也许表述的不清楚,请看下面的例子。
假如出栈序列为4123,显然不满足上述要求,因为对于4,它后面比它小的数字序列为123,递加,所以不是合法出栈序列。
若出栈为3142,也不合法,因为3后面比它小的1和2不是递减排列的。
若出栈为1234,则合法,因为对于每一个数字,它后面没有比它小的数字。
对于入栈顺序为123456789abcdef,给定一个出栈序列判断其合法性。
如出栈为67d51f94e2ba83c,因为对于d,它后面比它小的19或4e或123或ac 等等都不是递减的,所以不合法。
又如379a8b65c4ed21f,这是按上面要求写的,可以证明是合法的出栈顺序
注:这是我在做这种题时发现的,也许很多人早就发现了吧,这用来排除那些错误的出栈顺序很有效。对于这个方法我也没有进行过证明,可能对某些情况下的特殊序列会存在误判吧..不过至少现在我用它来做这种题都不会错的..呵呵